如何在根节点有属性时选择xml根节点?
我想使用XPath查询来选择xml文档的根节点的所有子节点。如何在根节点有属性时选择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");
此代码工作正常,它当根节点没有任何属性时,选择根节点的所有子节点,它适用于第1个xml fi但第二个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
和相应的类。他们更容易合作。
感谢您的帮助。我们仍然在.net 2.0框架时代,所以我不认为我可以使用XDocument。我试着改用你的其他解决方案。 – Shekhar 2011-05-02 11:18:15
你说得对,你不能在.NET 2.0中使用'XDocument'。 – 2011-05-02 11:19:18
我不知道C#的旧xml方法,但可以随时打开文件以读为普通文本,然后读取到第一个节点,然后解析它,但是您喜欢。
[在C#中使用带有默认名称空间的Xpath]的可能的重复(http://stackoverflow.com/questions/585812/using-xpath-with-default-namespace-in-c) – 2011-05-02 17:53:54