2012-07-27 119 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