XMLString необходимо изменить формат - PullRequest
0 голосов
/ 02 марта 2012

мои данные xml похожи: (Это xmlstring, а не xmlfile, и мне нужно преобразовать без сохранения ....)

 <ProductGroups>
 <ProductGroup>
 <Name>ABC</Name>
 <Id>123</Id>
 </ProductGroup>
 <ProductGroup>
 <Name >xyz</Name>
 <Id>456</Id>
 </ProductGroup>
 <ProductGroup>
 <Name>PQR</Name>
 <Id>789</Id>
 </ProductGroup>
     .
     .
 </ProductGroups>

Я хочу преобразовать вот так

<PRODUCTGROUPS>
<Name ID="123"> ABC</NAME>
<Name ID="456"> XYZ</NAME>
<Name ID="789">PQR</NAME>
   .
   .
</PRODUCTGROUPS>

Я использую C # с .NET.

Ответы [ 2 ]

1 голос
/ 02 марта 2012

Из памяти может содержать некоторые ошибки:

var doc = XDocument.Load(...);
var groups = doc.Descendants(ProductGroup);

var newDoc = new XElement("ProductGroups", 
    groups.Select(pg => new XElement("Name", 
            new XAttribute("Id", pg.Element("Id").Value), 
            pg.Element("Name").Value) ));


newDoc.Save(...);
0 голосов
/ 02 марта 2012

Вы можете попробовать это с linq2xml: (РЕДАКТИРОВАТЬ: примерно такой же подход, как Хенк Холтерман)

XDocument sourceDocument = XDocument.Load("D:\\XmlFile.xml");

XDocument targetDocument = new XDocument();
var productGroupsElement = new XElement("ProductGroups");
sourceDocument.Descendants("ProductGroup").ToList().ForEach(productGroup =>
{
    if (productGroup.Element("Name") != null && productGroup.Element("Id") != null)
    {
        var nameElement = new XElement("Name", productGroup.Element("Name").Value);
        nameElement.Add(new XAttribute("Id", productGroup.Element("Id")));
        productGroupsElement.Add(nameElement);
    }
});

targetDocument.Add(productGroupsElement);
var resultXml = targetDocument.ToString(SaveOptions.None);
...