C# 如何使用xpath获取所有节点名

C# 如何使用xpath获取所有节点名,c#,xpath,C#,Xpath,你好 我通常要做的是将xml转换为xhtml。我需要xhtml来创建epub 输入是xml。用户需要的是在程序中插入xml,输出是xhtml文件。布局合理 因此,我在下面的代码中试图做的是检查节点名。为了让程序知道要使用什么html标记 示例xml文件中有一个Title元素。所以在我的节目里。当节点为Title时,它将写入 多谢各位。我希望我的问题是清楚的 我从microsoft获得了这个xml示例 <?xml version='1.0'?> <!-- This file

你好

我通常要做的是将xml转换为xhtml。我需要xhtml来创建epub

输入是xml。用户需要的是在程序中插入xml,输出是xhtml文件。布局合理

因此,我在下面的代码中试图做的是检查节点名。为了让程序知道要使用什么html标记

示例xml文件中有一个Title元素。所以在我的节目里。当节点为Title时,它将写入

多谢各位。我希望我的问题是清楚的

我从microsoft获得了这个xml示例

<?xml version='1.0'?>
   <!-- This file represents a fragment of a book store inventory database -->
   <bookstore>
     <book genre="autobiography">
       <title>The Autobiography of Benjamin Franklin</title>
       <author>
         <first-name>Benjamin</first-name>
         <last-name>Franklin</last-name>
       </author>
       <price>8.99</price>
     </book>
     <book genre="novel">
       <title>The Confidence Man</title>
       <author>
         <first-name>Herman</first-name>
         <last-name>Melville</last-name>
       </author>
       <price>11.99</price>
     </book>
     <book genre="philosophy">
       <title>The Gorgias</title>
       <author>
         <name>Plato</name>
       </author>
       <price>9.99</price>
     </book>
   </bookstore>
如果希望获取给定
Xml
的所有节点名,只需执行此操作即可

我更喜欢使用
Linq
而不是
Xml

XDocument doc = XDocument.Parse(input);

var nodenames = doc.Descendants()     // Read all descendants
       .Select(x=>x.Name.LocalName)   // Look for node name.
       .ToList();
现在您可以通过循环
节点名
来访问元素

foreach(节点名中的变量名) { Console.WriteLine(name);//此处的访问名。 }


选中此项

显然,您使用的是
XPathNavigator
。下面是演示其用法的代码

var doc = new XPathDocument("test.xml");
var nav = doc.CreateNavigator();
var iter = nav.Select("//*");

while (iter.MoveNext())
{
    Console.WriteLine(iter.Current.LocalName);
}

xpath表达式检索所有子节点。

为什么我有向下投票?这与什么有关?我如何使用它?我复制了代码,它说“System.Collections.Generic.List”不包含“Dump”的定义,并且没有扩展方法“Dump”不要在实际代码中使用
Dump
,使用简单的foreach循环遍历每个节点。
var doc = new XPathDocument("test.xml");
var nav = doc.CreateNavigator();
var iter = nav.Select("//*");

while (iter.MoveNext())
{
    Console.WriteLine(iter.Current.LocalName);
}