Usuário com melhor resposta
Agrupar itens xml

Pergunta
-
Bom dia pessoal,
Estou de novo com o seguinte problema, meu cliente tem um xml com a seguinte estrutura:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<produtos>
<product>
<idProduto>5</idProduto>
<name><![CDATA[Produto 1]]></name>
<idSku>2000029</idSku>
<categoryid1><![CDATA[Mega]]></categoryid1>
<SKU><![CDATA[040600620000980]]></SKU>
</product>
<product>
<idProduto>5</idProduto>
<name><![CDATA[Produto 1]]></name>
<idSku>2000030</idSku>
<categoryid1><![CDATA[Mega]]></categoryid1>
<SKU><![CDATA[040600620000985]]></SKU>
</product>
<product>
<idProduto>5</idProduto>
<name><![CDATA[Produto 1]]></name>
<idSku>2000031</idSku>
<categoryid1><![CDATA[Mega]]></categoryid1>
<SKU><![CDATA[040600620000990]]></SKU>
</product>
<product>
<idProduto>5</idProduto>
<name><![CDATA[Produto 1]]></name>
<idSku>2000032</idSku>
<categoryid1><![CDATA[Mega]]></categoryid1>
<SKU><![CDATA[040600620000995]]></SKU>
</product>
<product>
<idProduto>13</idProduto>
<name><![CDATA[Produto 2]]></name>
<idSku>2000197</idSku>
<categoryid1><![CDATA[Bazar]]></categoryid1>
<SKU><![CDATA[171011710000136]]></SKU>
</product>
<product>
<idProduto>13</idProduto>
<name><![CDATA[Produto 2]]></name>
<idSku>2000199</idSku>
<categoryid1><![CDATA[Bazar]]></categoryid1>
<SKU><![CDATA[171011710000138]]></SKU>
</product>
...
</produtos>
e eu preciso transformar nisso:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<produtos>
<product>
<idProduto>5</idProduto>
<name><![CDATA[Produto 2]]></name>
<idSku>2000029|2000030|2000031|2000032</idSku>
<categoryid1><![CDATA[Mega]]></categoryid1>
<SKU><![CDATA[040600620000980|040600620000985|040600620000990|040600620000995]]></SKU>
</product>
<product>
<idProduto>13</idProduto>
<name><![CDATA[Produto 2]]></name>
<idSku>2000197|2000199</idSku>
<categoryid1><![CDATA[Bazar]]></categoryid1>
<SKU><![CDATA[171011710000136|171011710000138]]></SKU>
</product>
...
</produtos>Atualmente estou usando o XDocument para carregar e ler o arquivo, procurei pela internet e achei algumas coisas que poderiam me ajudar, mas não consegui nada, será que alguém sabe ou tem um ideia de como fazer isso??
Qualquer e toda ajuda será bem vinda, agradeço desde já.
- Movido Levi DomingosModerator quarta-feira, 6 de fevereiro de 2013 17:55
Respostas
-
Não tava fazendo nada... então fiz pra vc...
não sei como fazer isso com um comando... mas nada que um monte não resolva.
System.Data.DataSet ds = new DataSet(); ds.ReadXml(System.IO.Directory.GetCurrentDirectory() + "\\x.xml"); System.Xml.XmlDocument xDoc = new System.Xml.XmlDocument(); xDoc.Load(System.IO.Directory.GetCurrentDirectory() + "\\x.xml"); var xDocAgrupado = new System.Xml.XmlDocument(); var xDocAgrupadoProdutos = xDocAgrupado.CreateElement("produtos"); xDocAgrupado.AppendChild(xDocAgrupadoProdutos); foreach(System.Xml.XmlNode x in xDoc.DocumentElement.ChildNodes ) { var xDocAgrupadoProduto = xDocAgrupadoProdutos.SelectSingleNode("product[idProduto = " + x.SelectSingleNode("idProduto").InnerText + "]"); if (xDocAgrupadoProduto == null) { xDocAgrupadoProduto = xDocAgrupado.CreateElement("product"); xDocAgrupadoProduto.InnerXml = x.InnerXml; xDocAgrupadoProdutos.AppendChild(xDocAgrupadoProduto); } else { var xIdSku = xDocAgrupadoProduto.SelectSingleNode("idSku"); xIdSku.InnerText += "|" + x.SelectSingleNode("idSku").InnerText; var xSku = xDocAgrupadoProduto.SelectSingleNode("SKU"); xSku.InnerText += "|" + x.SelectSingleNode("SKU").InnerText; } } string caminhoTemp = System.IO.Path.GetTempFileName(); caminhoTemp = System.IO.Path.ChangeExtension(caminhoTemp, ".xml"); System.IO.File.WriteAllText(caminhoTemp, xDocAgrupado.InnerXml); System.Diagnostics.Process.Start("iexplore", caminhoTemp);
- Marcado como Resposta Marcos.Leandro quarta-feira, 13 de março de 2013 15:00