我将XML作为服务的响应。
var Response = httpService.GetResponse();
XDocument doc = XDocument.Parse(Response);
xml看起来像这样:
<?xml version="1.0" encoding="utf-8"?>
<edmx:Edmx xmlns:edmx="http://docs.oasis-open.org/odata/ns/edmx" Version="4.0">
<Parent>
<ChildType1>contentA</ChildType1>
<ChildType2>contentB</ChildType2>
<ChildType3>contentC</ChildType3>
</Parent>
<Parent>
<ChildType1>contentD</ChildType1>
<ChildType3>contentE</ChildType3>
</Parent>
</edmx:Edmx>
如何编辑它,看起来像这样:
<?xml version="1.0" encoding="utf-8"?>
<edmx:Edmx xmlns:edmx="http://docs.oasis-open.org/odata/ns/edmx" Version="4.0">
<Parent>
<ChildType1>contentA</ChildType1>
<ChildType2>contentB</ChildType2>
<ChildType3>contentC</ChildType3>
<ChildType1>contentD</ChildType1>
<ChildType3>contentE</ChildType3>
</Parent>
</edmx:Edmx>
答案 0 :(得分:0)
一旦你理解了如何玩XDocument,XElement就很简单了。
我刚刚创建了一个List<XElement>
来收集所有子元素,然后我只是将它们附加到一个新的父级并将父级分配给根。
我强烈建议您创建一个新文档,而不是更新现有文档。
解决方案1:详细版本,了解其工作原理。
XDocument xDoc = XDocument.Parse(str);
List<XElement> allChildNodes = new List<XElement>();
foreach (var parent in xDoc.Root.Elements("Parent"))
{
allChildNodes.AddRange(parent.Descendants());
}
XElement xParent = new XElement("Parent");
xParent.Add(allChildNodes);
xDoc.Root.Descendants().Remove();
xDoc.Root.Add(xParent);
解决方案2:感谢Jeff Mercado,我们有一个紧凑版本。
XDocument xDoc = XDocument.Parse(str);
xDoc.Root.ReplaceNodes(
new XElement("Parent", // New parent element is created
xDoc.Root.Elements("Parent").Elements()));
<强>输出:强>
<root>
<Parent>
<ChildType1>contentA</ChildType1>
<ChildType2>contentB</ChildType2>
<ChildType3>contentC</ChildType3>
<ChildType1>contentD</ChildType1>
<ChildType3>contentE</ChildType3>
</Parent>
</root>
答案 1 :(得分:0)
要替换Parent
节点,可以使用XElement.ReplaceNodes()
替换根节点的子节点。将这些节点替换为包含已替换节点子节点的新Parent
节点。
doc.Root.ReplaceNodes(
new XElement("Parent",
doc.Root.Elements("Parent").Elements()
)
);