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

时间:2016-06-16 02:57:14

标签: c# xpath

美好的一天,

我试图做的一般是将xml转换为xhtml。我需要xhtml才能创建一个epub

输入是xml。用户想要的是在程序中插入xml,输出是xhtml文件。有适当的布局。

所以我在下面的代码中尝试做的是检查节点名称。为了让程序知道要使用什么html标签。

在xml文件中有一个Title元素。所以在我的程序中。当节点为Title时,它将写<h1>

谢谢你。我希望我的问题很明确。

我有来自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>

我想要做的是获取循环中的所有节点名称

strExpression = "/bookstore";

            // Select the node and place the results in an iterator.
            NodeIter = nav.Select(strExpression);


            //Iterate through the results showing the element value.
            while (NodeIter.MoveNext())
            {
                Console.WriteLine("Book Title: " + NodeIter.Current.Value);
            };

2 个答案:

答案 0 :(得分:0)

如果您希望获得给定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();

现在,您可以通过循环nodenames来访问元素。

foreach(nodenames中的var名称) {     Console.WriteLine(名); //访问此处的名称。 }

选中此Demo

答案 1 :(得分:0)

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

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

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

//* xpath表达式检索所有后代节点。