簡體   English   中英

如何使用C#返回XML的根元素?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM