对于带有命名空间的XML,XPATH返回null

its*_*lur 2 c# xml asp.net xpath

我有以下XML.

<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>
Run Code Online (Sandbox Code Playgroud)

我正在使用C#代码(.NET 4.0)来解析此XML.我使用下面的代码选择<record>上面的XML中的所有节点.

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
}
Run Code Online (Sandbox Code Playgroud)

问题是foreach循环从未执行过.应该使用什么正确的XPath,以便获得所有<record>节点?

mar*_*c_s 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
}
Run Code Online (Sandbox Code Playgroud)

使用除空字符串之外的其他内容 - 并在XPath中使用该XML命名空间前缀.