c# - 根节点有属性时如何选择xml根节点?

标签 c# xml xpath

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

我的 xml 文件如下所示:

<?xml version="1.0" encoding="UTF-8" ?> 
<root>
    <automotive_industry>
        <automotive /> 
        <rail_global_services /> 
    </automotive_industry>
</root>

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

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

XmlDocument gazetteDocument = new XmlDocument();
gazetteDocument.Load(xmlFilePath);
XmlNodeList allNodes = gazetteDocument.SelectNodes("root");

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

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

编辑: 我找到了一个 XPath 查询:/* 这个查询选择根节点,不管它是否有任何属性。选择根节点后,我可以遍历它的所有子节点。

最佳答案

虽然您的 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);

更好的方法是使用 XDocument和相应的类。他们更容易合作。

关于c# - 根节点有属性时如何选择xml根节点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5856245/

相关文章:

android - 使用 SimpleXML 反序列化带有 HTML 转义部分的 XML

xml - 仅使用 XPath 在 VTD-XML 中进行动态查找

java - 我想根据属性值选择评论节点

xpath - xpath-按ID导入div

c# - 选择 child 后触发 WPF TreeviewItem 父选择事件?

c# - 加密文件并将其发送通过

c# - 为什么是 "Finalize method should not reference any other objects"?

c# - 获取变量的地址位置

Java XML 模式验证 : prefix not bound

sql-server-2008 - 用于检查条目是否存在所有提供的元素对的 XPath