2016-11-10 2 views
0

J'ai une des données qui ressemblent à ceci:multi-éléments Adjonction à 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" } 
    } 
}; 

Et je veux que mon sortie ressemble à ceci:

<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> 

Je suis coincé à essayer de boucler à travers l'élément ItemList et en ajoutant des nœuds à l'intérieur. Voilà ce que j'ai maintenant:

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); 
} 

Comment puis-je boucle à travers tous les « accords » et append à tous les éléments ITEMLIST?

Contraintes: Je suis obligé de travailler avec XmlDocument, cela fait partie des anciens codes.

Répondre

0

En utilisant votre exemple, il suffit d'ajouter une nouvelle boucle pour ajouter vos articles deal:

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

Hey, merci! Mon cerveau s'est coincé, je ne pouvais vraiment pas penser à ça. Merci encore :) Maintenant, pour traduire cette logique en C/AL ... (J'ai d'abord eu ce problème dans Dynamics NAV, je viens de mettre C# ici parce que le public est plus large) – Farid