2

我有以下 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>

我正在使用 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
}

问题是永远不会执行 foreach 循环。应该使用什么正确的 XPath 才能获得所有<record>节点?

4

1 回答 1

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
}

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

于 2012-07-27T06:04:24.257 回答