C# xpath显示来自不同级别节点的数据 - aaaa - firts 最后 8.23 bbb 18.23 ccc 11.22

C# xpath显示来自不同级别节点的数据 - aaaa - firts 最后 8.23 bbb 18.23 ccc 11.22,c#,xpath,C#,Xpath,我想选择不同级别的所有书籍,然后显示每个书籍的信息(作者、标题和价格)。此时,代码还将为第一本书显示其他书。仅显示所需信息的最佳方式是什么。 我需要使用XPath xPathDoc = new XPathDocument(filePath); xPathNavigator = xPathDoc.CreateNavigator(); XPathNodeIterator xPathIterator = xPathNavigator.Select("/bookstore//book"); foreac

我想选择不同级别的所有书籍,然后显示每个书籍的信息(作者、标题和价格)。此时,代码还将为第一本书显示其他书。仅显示所需信息的最佳方式是什么。 我需要使用XPath

xPathDoc = new XPathDocument(filePath);
xPathNavigator = xPathDoc.CreateNavigator();
XPathNodeIterator xPathIterator = xPathNavigator.Select("/bookstore//book");
foreach (XPathNavigator navigator in xPathIterator)
{
     XPathNavigator clone = navigator.Clone();
     clone.MoveToFirstChild();

     Console.WriteLine(clone.Name + " : " + clone.Value);
     while (clone.MoveToNext())
     {
         Console.Write(clone.Name + " : " + clone.Value + " | ");
     }
} 
双斜杠(
/
)指定的不仅仅是直接斜杠。怎么样

/bookstore/book 

??这将只为您提供顶级
书籍。

如果您愿意尝试Linq to Xml:

var xDoc = XDocument.Parse(xml); //or XDocument.Load(filename)
var books = xDoc.Root.Elements("book")
            .Select(b => new
            {
                Author = b.Element("author").Element("first-name").Value + " " +
                            b.Element("author").Element("last-name").Value,
                Books = b.Descendants("book")
                            .Select(x => new 
                            {
                                Title = x.Element("title").Value,
                                Price = (decimal)x.Element("price"),
                            })
                            .Concat(new[] { new { Title = b.Element("title").Value, 
                                                Price = (decimal)b.Element("price") } 
                                        })
                            .ToList()

            })
            .ToList();

你说的“不同层次”是什么意思?您的选择器检索
以下所有级别的
元素。您不想选择
book/otherbook/book
吗?我想选择所有的书,但我想显示关于每本书的信息,此时第一本书也包含信息,然后再次单独显示。那么您当前的解决方案是否已损坏,或者您想改进它?我认为你当前的选择应该达到你所描述的效果。选择所有的书都可以。在使用XPathNavigator进行迭代时,我无法显示有关每本书的信息。我的解决方案太深奥了,第一本书应该只显示(作者、标题和价格),如果你能想出更好的方法使用XPath,请让我知道。我想得到所有的书(代码正常工作)并对它们进行迭代,并为每本书显示(作者、标题和价格)。目前,我还在显示第一本书的数据。我想避免这种情况。但是我看不到一种通过使用XPathNavigator cloneIt进行迭代来访问book节点的更好方法。它看起来很棒,但我正在尝试熟悉Xpath。我将在后面介绍linq到xml。非常感谢。