2012-07-27 114 views
2

我有以下XML。XPATH對命名空間返回空值

<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> 

我正在使用C#代碼(.NET 4.0)來解析此XML。我正在使用下面的代碼來選擇上述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循環永遠不會執行。什麼應該是正確的XPath使用,以便我得到所有<record>節點?

回答

6

試試這個 - 我遇到了麻煩,在過去與具有「空」 XML前綴不是空字符串其他

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 
} 

使用的東西 - 和使用XML命名空間前綴在你的XPath。

+0

@marc_c:太好了!有用。非常感謝! – itsbalur 2012-07-27 06:15:31

+0

兩天前我閱讀了XmlNamespaceManager。現在在這裏。現在我只需要用我的自我,這對我來說將來會很自然:) – radbyx 2012-07-27 06:41:11