2
다음 XML이 있습니다.XPATH는 네임 스페이스가있는 XML의 경우 null을 반환합니다.
<ArrayOfString xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://localhost/gsainis/GsaInisWebService">
<string>
<gsafeed>
<group action="add">
<record>
......
......
</record>
</group>
</gsafeed>
</string>
</ArrayOfString>
나는이 XML을 구문 분석하는 C# 코드 (.NET 4.0)를 사용하고 있습니다. 위의 XML에서 모든 <record>
노드를 선택하려면 아래 코드를 사용하고 있습니다.
XmlNamespaceManager xmlnsmgr = new XmlNamespaceManager(INISRecordXMLdoc.NameTable);
xmlnsmgr.AddNamespace("xsi", "http://www.w3.org/2001/XMLSchema-instance");
xmlnsmgr.AddNamespace("xsd", "http://www.w3.org/2001/XMLSchema");
xmlnsmgr.AddNamespace(string.Empty, "http://localhost/gsainis/GsaInisWebService");
foreach (XmlNode node in INISRecordXMLdoc.SelectNodes("//ArrayOfString/string/gsafeed/group/record",xmlnsmgr))
{
//Do something
}
문제는 foreach 루프가 실행되지 않습니다. <record>
노드를 모두 얻을 수 있도록 올바른 XPath를 사용해야합니까? 빈 문자열 이외의
XmlNamespaceManager xmlnsmgr = new XmlNamespaceManager(INISRecordXMLdoc.NameTable);
xmlnsmgr.AddNamespace("ns", "http://localhost/gsainis/GsaInisWebService");
foreach (XmlNode node in INISRecordXMLdoc.SelectNodes("//ns:ArrayOfString/ns:string/ns:gsafeed/ns:group/ns:record", xmlnsmgr))
{
// Do something
}
사용 무언가를 - 당신의 XPath에 그 XML 네임 스페이스 접두사를 사용 : 나는 "빈"XML 접두사를 갖는 과거에 문제를 했어 -
@marc_c : 좋습니다! 그것은 작동합니다. 많은 감사합니다! – itsbalur
2 일 전에 XmlNamespaceManager에 대해 읽었습니다. 그리고 지금 여기. 이제는 그저 내 자아를 사용해야하고, 앞으로는 나에게 자연스럽게 사용할 수있을 것입니다. :) – radbyx