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

时间:2015-09-06 16:35:32

标签: c# xml

我是使用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(),但我想它不会这样做。

1 个答案:

答案 0 :(得分:1)

你不能真的这样做,因为它不是App.get_running_app().stop()的设计目标。您可能想要的是更高级别的API,如LINQ to XML。

例如,你可以像这样循环阅读你的书:

XmlReader

在此处查看有效的演示:https://dotnetfiddle.net/m99eCl