首页 文章

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

提问于
浏览
3

我试图使用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属性 .

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

EDIT : 我找到了一个XPath查询: /* 此查询选择根节点,无论它是否具有任何属性 . 一旦选择了根节点,我就可以迭代其所有子节点 .

3 回答

  • 0

    尽管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和相应的类 . 它们更易于使用 .

  • 3

    我不知道C#的旧xml方法,但你总是可以打开文件读取普通文本,然后读取到第一个节点并按照你喜欢的方式解析它 .

  • 0

    你可以使用下面的GetElementsByTagName方法是我的代码的片段

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

相关问题