当根节点有属性时如何选择xml根节点?

She*_*har 5 c# xml xpath

我正在尝试使用 XPath 查询选择 xml 文档根节点的所有子节点。

我的 xml 文件如下所示:

<?xml version="1.0" encoding="UTF-8" ?> 
<root>
    <automotive_industry>
        <automotive /> 
        <rail_global_services /> 
    </automotive_industry>
</root>
Run Code Online (Sandbox Code Playgroud)

<?xml version="1.0" encoding="UTF-8" ?> 
<root xmlns="http://www.my_department.my_company.com/project_name">
    <automotive_industry>
        <automotive /> 
        <rail_global_services /> 
    </automotive_industry>
    </root>
Run Code Online (Sandbox Code Playgroud)

选择根节点的C#代码如下:

XmlDocument gazetteDocument = new XmlDocument();
gazetteDocument.Load(xmlFilePath);
XmlNodeList allNodes = gazetteDocument.SelectNodes("root");
Run Code Online (Sandbox Code Playgroud)

此代码工作正常,当根节点没有任何属性时,它会选择根节点的所有子节点,也就是说,它适用于第一个 xml 文件,但不适用于第二个 xml 文件,因为第二个文件具有 xmlns 属性。

有谁知道当根节点有属性时如何选择根节点的所有子节点?

编辑: 我发现一个 XPath 查询:/*该查询选择根节点,无论它是否有任何属性。一旦选择了根节点,我就可以迭代它的所有子节点。

Dan*_*rth 4

尽管 XML 文档中的命名空间很好,但您需要在SelectNodes. 将此代码用于您的第二个 XML:

XmlDocument gazetteDocument = new XmlDocument();
gazetteDocument.Load(xmlFilePath);
XmlNamespaceManager nsmgr = new XmlNamespaceManager(gazetteDocument.NameTable);
nsmgr.AddNamespace("ns", "http://www.my_department.my_company.com/project_name");
XmlNodeList allNodes = gazetteDocument.SelectNodes("ns:root", nsmgr);
Run Code Online (Sandbox Code Playgroud)

更好的方法是使用XDocument相应的类。与他们合作要容易得多。