我是使用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(),但我想它不会这样做。
答案 0 :(得分:1)
你不能真的这样做,因为它不是App.get_running_app().stop()
的设计目标。您可能想要的是更高级别的API,如LINQ to XML。
例如,你可以像这样循环阅读你的书:
XmlReader
在此处查看有效的演示:https://dotnetfiddle.net/m99eCl