2012-07-27 4 views
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 접두사를 갖는 과거에 문제를 했어 -

답변

6

이보십시오.

+0

@marc_c : 좋습니다! 그것은 작동합니다. 많은 감사합니다! – itsbalur

+0

2 일 전에 XmlNamespaceManager에 대해 읽었습니다. 그리고 지금 여기. 이제는 그저 내 자아를 사용해야하고, 앞으로는 나에게 자연스럽게 사용할 수있을 것입니다. :) – radbyx

관련 문제