XMLDocument类-子节点-缩写负载与完全负载

时间:2018-08-12 14:35:35

标签: c# xml xmldocument

我正在探索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>");

1 个答案:

答案 0 :(得分:0)

由于第一个节点为doc.FirstChild,所以书不在doc.DocumentElement;中,而在XmlNode root = doc.DocumentElement;

book

在示例xml中,文档的根目录为title,子节点为pricebooks。但是,如果您想拥有多个book,则每个子节点都是title,而不是priceforeach(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);
    }
}

或者:

$filepath = "/www/user/../files/" . $_POST['fileID'] . ".zip";
enter code here
header("Pragma: no-cache");
header("Expires: 0");
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header("Cache-Control: public");
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Transfer-Encoding: binary');
header('Content-Disposition: attachment; filename="' . $filepath . '"');
header('Content-Length: ' . filesize($filepath));
flush();
@readfile($filepath); 
exit;