如何将嵌套的父节点添加到现有节点

时间:2019-07-08 22:01:54

标签: c# xml

我已经使用DataTable.WriteXML()方法生成了xml,该方法将我的表字段转换为xml文件的元素-正是我所需要的。

现在,我想添加另一个元素并将现有元素作为其子元素。

现有:

<DocketImport>
  <Docket>
    <XRefCode>1578</XRefCode>
    <Name>1578</Name>
    <PieceRate>0</PieceRate>
    <OrgXRefCode>terminalA</OrgXRefCode>
  </Docket>
</DocketImport>

所需:

<DocketImport>
  <Docket>
    <XRefCode>1578</XRefCode>
    <Name>1578</Name>
    <PieceRate>0</PieceRate>
    <Org>        
     <OrgXRefCode>terminalA</OrgXRefCode>
    </Org>
  </Docket>
</DocketImport>

1 个答案:

答案 0 :(得分:0)

如果以下结果可以接受:

<?xml version="1.0" standalone="yes"?>
<DocumentElement>
  <DataTable1>
    <XRefCode>1578</XRefCode>
    <Name>1578</Name>
    <PieceRate>0</PieceRate>
    <Org xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
      <OrgXRefCode>terminalA</OrgXRefCode>
    </Org>
  </DataTable1>
</DocumentElement>

您可以通过为DataTable的最后一列定义自定义类型来实现所需的行为

public class Org
{
    public string OrgXRefCode { get; set; }
}

比您的DataTable初始化看起来如下:

var dataTable = new DataTable("DataTable2");

dataTable.Columns.AddRange(new DataColumn[]{
    new DataColumn("XRefCode"),
    new DataColumn("Name"),
    new DataColumn("PieceRate"),
    new DataColumn("Org", typeof(Org))
});

var dataRow = dataTable.NewRow();
dataRow["XRefCode"] = 1578;
dataRow["Name"] = 1578;
dataRow["PieceRate"] = 0;
dataRow["Org"] = new Org()
{
    OrgXRefCode = "terminalA"
};

dataTable.Rows.Add(dataRow);

调用dataTable.WriteXml()将产生您期望的XML