XML元素没有正确嵌套在foreach中

时间:2012-06-28 14:18:06

标签: c# xml

刚刚编写了一个Web服务并尝试将一个sharepoint列表的列作为xml返回。但是项目没有正确嵌套

            System.Xml.XmlNode node = doc.AppendChild(doc.CreateElement("Inventories"));
            foreach (ListItem item in items)
            {
                node = node.AppendChild(doc.CreateElement("Inventory"));
                node.AppendChild(doc.CreateElement("ID")).InnerText = Convert.ToString(item["ID"]);
                node.AppendChild(doc.CreateElement("Name")).InnerText = Convert.ToString(item["Server_Name"]) + " >> " + Convert.ToString(item["Computer_Name"]) + " >> " + Convert.ToString(item["IP"]);
            }
        }
            return doc.InnerXml;

这个返回

<inventories>
  <inventory>
    <ID></ID>
    <Name></Name>
    <ID></ID>
    <Name></Name>
    <ID></ID>
    <Name></Name>
  </inventory></inventory></inventory>
</inventories>

所以foreach循环中的库存项目有点怪异,我只想让它成为每个ID和Name属性的父级,但是没有弄清楚我做错了什么。

必须是那样的

<inventories>
  <inventory>
    <ID></ID>
    <Name></Name>
  </inventory>
  <inventory>
    <ID></ID>
    <Name></Name>
  </inventory>
  <inventory>
    <ID></ID>
    <Name></Name>
  </inventory>
</inventories>

所有帮助都将得到应用,并感谢大家阅读

1 个答案:

答案 0 :(得分:3)

您正在重复使用名称“node”尝试:

System.Xml.XmlNode rootNode = doc.AppendChild(doc.CreateElement("Inventories"));
System.Xml.XmlNode childNode;
            foreach (ListItem item in items)
            {
                childNode =doc.CreateElement("Inventory");
                childNode .AppendChild(doc.CreateElement("ID")).InnerText = Convert.ToString(item["ID"]);
                childNode .AppendChild(doc.CreateElement("Name")).InnerText = Convert.ToString(item["Server_Name"]) + " >> " + Convert.ToString(item["Computer_Name"]) + " >> " + Convert.ToString(item["IP"]);
                rootNode.AppendChild(childNode);
            }
        }
        return doc.InnerXml;