[英]How to go back to the root element in XML using C#?
我是使用C#進行XML編程的新手,並且一直在嘗試掌握這些概念。 我有一個2books.xml文件,看起來像
<!--sample XML fragment-->
<bookstore>
<book genre='novel' ISBN='10-861003-324'>
<title>The Handmaid's Tale</title>
<price>19.95</price>
</book>
<book genre='novel' ISBN='1-861001-57-5'>
<title>Pride And Prejudice</title>
<price>24.95</price>
</book>
<book genre='novel' ISBN='1-861991-57-9'>
<title>The Honor</title>
<price>20.12</price>
</book>
</bookstore>
現在,當我嘗試以下代碼部分時,請使用XmlReader
using (XmlReader xReader = XmlReader.Create(@"C:\Users\Chiranjib\Desktop\2books.xml"))
{
xReader.MoveToContent();
Console.WriteLine("-----------> Now "+xReader.Name);
Console.WriteLine("------Inner XML -----> "+xReader.ReadInnerXml()); //Positions the reader to the next root element type after the call
Console.WriteLine("------OuterXML XML -----> " + xReader.ReadOuterXml()); //Positions the reader to the next root element type after the call -- for a leaf node it reacts the same way as Read()
while (xReader.Read())
{
Console.WriteLine("In Loop");
if ((xReader.NodeType == XmlNodeType.Element) && (xReader.Name == "book"))
{
xReader.ReadToFollowing("price");
Console.WriteLine("---------- In Loop -------- Price "+xReader.GetAttribute("price"));
}
}
}
Console.ReadKey();
}
顯然,xReader.ReadInnerXml()將讀取器放置在調用后的文件末尾,因此xReader.ReadOuterXml()不會打印任何內容。
現在,我希望成功調用xReader.ReadOuterXml()。 我怎樣才能回到以前的根節點? 我嘗試了xReader.MoveToElement(),但我猜它沒有這樣做。
您不能真正做到這一點,因為這不是XmlReader
目的。 您可能想要的是更高級別的API,例如LINQ to XML。
例如,您可以像這樣遍歷書籍:
var doc = XDocument.Parse(xml);
foreach (var book in doc.Descendants("book"))
{
Console.WriteLine("Title: {0}", (string) book.Element("title"));
Console.WriteLine("ISBN: {0}", (string) book.Attribute("ISBN"));
Console.WriteLine("Price: {0}", (decimal) book.Element("price"));
Console.WriteLine("---");
}
在此處查看有效的演示: https : //dotnetfiddle.net/m99eCl
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.