2016-11-10 85 views
0

我有一个看起来像这样的数据:追加多元素的XmlDocument

List<Deal> deals = new List<Deal> 
{ 
    new Deal 
    { 
     DealNo = "S001", 
     DealItem = new List<string> { "A001", "A002", "A003" } 
    }, 
    new Deal 
    { 
     DealNo = "S002", 
     DealItem = new List<string> { "T001", "T002" } 
    } 
}; 

而且我想我的输出看起来像这样:

<Resource> 
    <ResourceID> 
    <ResourceBody> 
     <DealNo>S001</DealNo> 
     <ItemList> 
     <Item>A001</Item> 
     <Item>A002</Item> 
     <Item>A003</Item> 
     </ItemList> 
     <DealNo>S002</DealNo> 
     <ItemList> 
     <Item>T001</Item> 
     <Item>T002</Item> 
     </ItemList> 
    </ResourceBody> 
    </ResourceID> 
</Resource> 

我被困在试图循环通过ItemList元素并添加节点。这是我现在有:

var xdoc = new XmlDocument(); 
// This structure is from other parts of the system, I can't change this 
xdoc.LoadXml("<Resource><ResourceID><ResourceBody></ResourceBody></ResourceID></Resource>"); 

foreach (var deal in deals) 
{ 
    var node = xdoc.CreateNode("element", "DealNo", ""); 
    node.InnerText = deal.DealNo; 
    var singleNode = xdoc.SelectSingleNode("Resource/ResourceID/ResourceBody"); 
    singleNode.AppendChild(node); 

    node = xdoc.CreateElement("ItemList"); 
    singleNode = xdoc.SelectSingleNode("Resource/ResourceID/ResourceBody"); 
    singleNode.AppendChild(node); 
} 

如何循环所有'交易',并追加通过所有ItemList元素?我不得不使用XmlDocument,它是旧代码的一部分。

回答

0

使用您的样品,只需添加一个新的循环,以增加您的交易项目:

foreach (var deal in deals) { 
    var node = xdoc.CreateNode("element", "DealNo", ""); 
    node.InnerText = deal.DealNo; 
    var singleNode = xdoc.SelectSingleNode("Resource/ResourceID/ResourceBody"); 
    singleNode.AppendChild(node); 

    node = xdoc.CreateElement("ItemList"); 
    singleNode = xdoc.SelectSingleNode("Resource/ResourceID/ResourceBody"); 

    // Add deal items here... 
    foreach (string dealItem in deal.DealItem) { 
     var dealItemNode = xdoc.CreateNode("element", "Item", ""); 
     dealItemNode.InnerText = dealItem; 
     node.AppendChild(dealItemNode); 
    } 

    singleNode.AppendChild(node); 
} 
+0

嘿,谢谢!我的大脑有点卡住了,我真的无法想象那一个。再次感谢:) 现在把这个逻辑转换成C/AL ......(我最初在动态导航中遇到了这个问题,我只是把C#放在这里,因为观众更广泛) – Farid