如何将 XML 子节点添加到父节点 c#

How to add XML child nodes to parent node c#

提问人:Uzarsef 提问时间:5/9/2020 更新时间:5/10/2020 访问量:1650

问:

如何将 XML 子节点添加到父节点 c#

我当前的 xml 文件如下所示:

 <?xml version="1.0" encoding=""?>
<sheet1>


  <rd>
    <id>45</id>
    <name>alex</name>
    <last>chali</last>
    <phone>33666998565</phone>
    <refF>
      <adresse>41301 US Hwy 280, Sylacauga AL 35150</adresse>
      <citie>NY</citie>
    </refF>
    <age>30</age>
    <mp>
      <degree>2</degree>
    </mp>
    <dpa>1</dpa>
  </rd>
  <rd>
    <id>89</id>
    <name>anna</name>
    <last>marie</last>
    <phone>336465798465</phone>
    <refF>
      <adresse>30 Memorial Drive, Avon MA 2322</adresse>
      <citie>LA</citie>
    </refF>
    <age>28</age>
    <mp>
      <degree>2</degree>
    </mp>
    <dpa>1</dpa>
  </rd>

</sheet1>

我在寻找什么:

<?xml version="1.0" encoding=""?>
<sheet1>

**<table>  // i want that contain all table rows**

  <rd>
    <id>45</id>
    <name>alex</name>
    <last>chali</last>
    <phone>33666998565</phone>
    <refF>
      <adresse>41301 US Hwy 280, Sylacauga AL 35150</adresse>
      <citie>NY</citie>
    </refF>
    <age>30</age>
    <mp>
      <degree>2</degree>
    </mp>
    <dpa>1</dpa>
  </rd>

  **</table>**
</sheet1>

这是我的代码:

  string header = "<?xml version=\"1.0\" encoding=\"utf-8\" ?><Sheet1></Sheet1>";
            XDocument doc = XDocument.Parse(header);
            XElement sheet1 = doc.Root;

            foreach (DataRow row in dt.AsEnumerable())
            {
                XElement rd = new XElement("rd", new object[] {
                    new XElement("id", row["id"]),
                    new XElement("name", row["name"]),
                    new XElement("last", row["last"]),
                    new XElement("phone", row["phone"]),
                    new XElement("refF", new object[] {
                        new XElement("adresse", row["adresse"]),
                        new XElement("citie", row["citie"]),
                    }),
                    new XElement("age", row["age"]),
                    new XElement("mp", new XElement("degree", row["mp"])),
                    new XElement("dpa", row["dpa"])
                });

                sheet1.Add(rd);
            }

            doc.Save(FILENAME);

        }

代码将“sheet1”显示为包含“rd”的根元素,但实际上我希望它作为“table”中的子元素。我应该如何重组它?请注意,我只能使用xDocument而不是xmlDocument

C# Visual Studio Linq-to-XML

评论

0赞 jdweng 5/10/2020
从 : <Sheet1></Sheet1> 到 : <table></table> 我想知道你是否要问这个问题。如果您同时想要 Sheet1 和 table,则 <Sheet1><table></table><Sheet1> 然后 XElement table = doc。后代(“表”)。第一();最后将行添加到表中 From : sheet1.添加(rd);至 :表。添加(rd);
0赞 Uzarsef 5/10/2020
是的,这就是我现在正在寻找的,我的问题是保存按钮
0赞 jdweng 5/10/2020
您已经有了保存方法。因此,如果你在全局空间中声明 doc,你可以简单地执行 doc。Save(FILENAME) 在按钮单击内。
0赞 Uzarsef 5/10/2020
现在我想要按钮显示保存对话框并选择保存xml文件的路径
0赞 jdweng 5/10/2020
查看 learn.microsoft.com/en-us/dotnet/framework/winforms/controls/...

答:

1赞 Mohammed Sajid 5/10/2020 #1

1 - 您可以添加标签:tableheader

string header = "<?xml version=\"1.0\" encoding=\"utf-8\" ?><Sheet1><table></table></Sheet1>";

2 - 代替 获取 ,获取类似 的元素:Roottable

XDocument doc = XDocument.Parse(header);
XElement table = doc.Root.Element("table");

结果

string header = "<?xml version=\"1.0\" encoding=\"utf-8\" ?><Sheet1><table></table></Sheet1>";
XDocument doc = XDocument.Parse(header);
XElement table = doc.Root.Element("table");

foreach (DataRow row in dt.AsEnumerable())
{
    XElement rd = new XElement("rd", new object[] {
        new XElement("id", row["id"]),
        new XElement("name", row["name"]),
        new XElement("last", row["last"]),
        new XElement("phone", row["phone"]),
        new XElement("refF", new object[] {
            new XElement("adresse", row["adresse"]),
            new XElement("citie", row["citie"]),
        }),
        new XElement("age", row["age"]),
        new XElement("mp", new XElement("degree", row["mp"])),
        new XElement("dpa", row["dpa"])
    });

    table.Add(rd);
}
doc.Save(FILENAME);

我希望这对您有所帮助。

评论

0赞 Uzarsef 5/10/2020
谢谢。这是一个很好的解决方案,效果很好。我还有一个小问题,你能帮我解决吗?
0赞 Mohammed Sajid 5/10/2020
@Uzarsef不客气,我可以帮忙。向我解释问题所在。
0赞 Uzarsef 5/10/2020
我想创建一个按钮将数据从 DataGridView 导出到此 XML 文件,并且没有数据集,它只是一个从 Excel 到 DataTable 的表导入
0赞 Mohammed Sajid 5/10/2020
@Uzarsef,不幸的是,我对 dataGridView 的操作知之甚少,但我认为您搜索的是这样的内容:stackoverflow.com/a/43055506/1745795,我希望这对您有所帮助。