【问题标题】:XMLDocument Class - Child Nodes - Abbreviated Load versus Full LoadXMLDocument 类 - 子节点 - 缩写加载与完全加载
【发布时间】:2018-08-12 14:35:35
【问题描述】:

我正在探索 XMLDocument 类

https://msdn.microsoft.com/en-us/library/system.xml.xmldocument(v=vs.110).aspx

我正在使用上述网站输入示例。我输入了示例来获取子节点,它可以工作。我的问题是为什么当我使用包含的完整 XML 文档时它不起作用 加上不止一本书。当我将代码与完整的 XML 文档一起使用时,需要修改代码以使其正常工作。

 XmlDocument doc = new XmlDocument();
    doc.LoadXml("<book ISBN='1-861001-57-5'>" +
                "<title>Pride And Prejudice</title>" +
                "<price>19.95</price>" +
                "</book>");

    XmlNode root = doc.FirstChild;

    //Display the contents of the child nodes.
    if (root.HasChildNodes)
    {
      for (int i=0; i<root.ChildNodes.Count; i++)
      {
        Console.WriteLine(root.ChildNodes[i].InnerText);
      }
    }

我正在使用的完整 XML 加载如下。它是从 https://msdn.microsoft.com/en-us/library/system.xml.xmldocument(v=vs.110).aspx

 doc.LoadXml("<?xml version=\"1.0\"?> \n" +
"<books xmlns=\"http://www.contoso.com/books\"> \n" +
"<book genre=\"novel\" ISBN=\"1-861001-57-8\"publicationdate=\"1823-01- 
  28\">\n"+
"    <title>Pride And Prejudice</title> \n" +
"    <price>24.95</price> \n" +
"  </book> \n" +
"<book genre=\"novel\" ISBN=\"1-861002-30-1\"ublicationdate=\"1985-01- 
  01\">\n" +
"    <title>The Handmaid's Tale</title> \n" +
"    <price>29.95</price> \n" +
"  </book> \n" +
"</books>");

【问题讨论】:

  • 能否在您的问题中添加示例完整的 XML 文档、预期输出和实际输出或错误?

标签: c# xml xmldocument


【解决方案1】:

由于第一个节点是&lt;?xml version="1.0"?&gt;,所以书籍不在doc.FirstChild,而是在doc.DocumentElement;

XmlNode root = doc.DocumentElement;

在您的示例 xml 中,文档的根是 book,子节点是 titleprice。但是,如果您想拥有多个 books,每个子节点都是 book,而不是 titleprice,因此您需要按名称访问它们或迭代以获得下一个级别。

foreach(XmlNode book in root)
{
    Console.WriteLine("Title: {0}\r\nPrice: {1}", 
        book["title"].InnerText,
        book["price"].InnerText);
}

或者:

foreach (XmlNode book in root)
{
    foreach (XmlNode attribute in book)
    {
        Console.WriteLine(attribute.InnerText);
    }
}

【讨论】:

  • 当我运行我的代码并检查 (root.HasChildNodes) 的值时,当我针对具有 ?xmlversion 标头的完整 XMLLoad 运行时,它反映的是错误
  • 我已经编辑了我的答案。如果你的 xml 有 &lt;?xmlversion header&gt; 你不能使用 doc.FirstChild 因为它会得到上面的标题而不是根。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多