How to select xml root node when root node has att

2020-02-14 08:56发布

I am trying to select all the child nodes of root node of an xml document using XPath query.

My xml file looks something like following :

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

AND

<?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# Code to select root node is as follows :

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

This code works fine, it selects all the child nodes of root node when root node does not have any attribute that is, it works for 1st xml file but does not work for 2nd xml file because 2nd file has xmlns attribute.

Does anyone knows how to select all the child nodes of root node when root node has attributes??

EDIT : I found one XPath query : /* This query selects root node no matter whether it has any attribute or not. Once root node is selected, I can iterate through its all the child nodes .

标签: c# xml xpath
3条回答
神经病院院长
2楼-- · 2020-02-14 09:06

You can use GetElementsByTagName method below are the snippet of my code

XmlDocument gazetteDocument = new XmlDocument();
gazetteDocument.Load(xmlFilePath);
XmlNodeList allNodes = gazetteDocument.GetElementsByTagName("root");
查看更多
一纸荒年 Trace。
3楼-- · 2020-02-14 09:13

Although the namespace in your XML document is fine, you need to use it in your SelectNodes. Use this code for your second 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);

The better way would be to use XDocument and corresponding classes. They are a lot easier to work with.

查看更多
爱情/是我丢掉的垃圾
4楼-- · 2020-02-14 09:14

I don't know the old xml methods of C#, but you could always open the file to read as normal text, and then read to the first node and parse it however you like.

查看更多
登录 后发表回答