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

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

我的xml文件如下所示:

       

        

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方法,但你总是可以打开文件读取普通文本,然后读取到第一个节点并按照你喜欢的方式解析它。