C#:如何修改我的xml的结构?

时间:2017-09-18 17:40:46

标签: c# xml xmldocument xml-documentation

我试图通过先添加一个子节点然后尝试更改节点的父节点来修改非常扩展的xml的结构。我对XML不是很有经验,所以我能够添加一个子节点,但是似乎当我试图追加新的父母时,它只是删除了我试图替换的所有父母。

以下是XML的整体结构:

<root>
    <products>
        <product id="1010-1001">
            <name>
            </name>
            <unit>Styk</unit>
            <shortDescription />
            <longDescription>
            </longDescription>
            <currency>DKK</currency>
            <price>
            </price>
            <categories>
                <category>0912</category>
            </categories>
        </product>
        <product id="1010-1002">
            <name>
            </name>
            <unit>Styk</unit>
            <shortDescription />
            <longDescription>
            </longDescription>
            <currency>DKK</currency>
            <price>31.982115219</price>
            <categories>
                <category>0912</category>
            </categories>
        </product>
    </products>
</root>

这就是我想要实现的目标:

<root>
    <products>
        <table>
            <name>BTS pulver 50 g m/antibiotika</name>
            <Image>.</Image>
            <longDescription>
            </longDescription>
            <product id="1010-1001" />
            <shortDescription />
            <unit>Styk</unit>
            <price>10.6600000000000000000000</price>
        </table>
    </products>
</root>

以下是我试图整理的代码:

    XmlNodeList list = doc.SelectNodes("root/products/product");




    foreach (XmlNode item in list)
    {
        XmlElement Image = doc.CreateElement("Image");
        Image.InnerText = "id";
        item.AppendChild(Image);
    }

  foreach(XmlNode parent in list)
    {
        XmlElement table = doc.CreateElement("table");
        parent.ParentNode.RemoveChild(parent);
        table.AppendChild(parent);
    }


    doc.Save(Console.Out);
    Console.ReadKey();

2 个答案:

答案 0 :(得分:1)

创建元素“table”,然后将现有项添加到此“table”元素。但是,由于您没有在文档中插入“table”元素,因此它将丢失。您必须在products元素上使用AppendChild(table)。

答案 1 :(得分:0)

你可以像这样使用linq xml:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;

namespace ConsoleApplication5
{
    class Program
    {
        const string FILENAME = @"c:\temp\test.xml";
        static void Main(string[] args)
        {

            XDocument doc = XDocument.Load(FILENAME);

            List<XElement> products = doc.Descendants("product").ToList();
            foreach (XElement product in products)
            {
                product.Add(new XElement("product", new XAttribute("id", (string)product.Attribute("id"))));

                product.ReplaceWith(new XElement("table", product.Descendants()));
            }

        }
    }


}