我一直在寻找和尝试几个小时,但我无法让它发挥作用。所以我决定在这里问一个问题。请帮助我。
我有一个像这样的xml
<parent>
<anothertag/>
<body>
<monitor value="3"/>
<mouse value="5"/>
<chair>
<monoblock value="5"/>
</chair>
</body>
</parent>
如果可能的话,这是我想要的xml输出
<parent>
<anothertag/>
<body>
<anotherbody>
<monitor value="3"/>
<mouse value="5"/>
<chair>
<monoblock value="5"/>
</chair>
</anotherbody>
</body>
</parent>
这是我的代码
string xml = "<parent>" +
"<anothertag/>" +
"<body>" +
"<monitor value=\"3\"/>" +
"<mouse value=\"5\"/>" +
"<chair>" +
"<monoblock value=\"5\"/>" +
"</chair>" +
"</body>" +
"</parent>";
XDocument doc = XDocument.Parse(xml);
var p = doc.Descendants("body").Elements();
foreach (var item in doc.Descendants("body").ToList())
{
item.Add(new XElement("anotherbody", p));
}
Console.WriteLine(doc.ToString());
这是输出
<parent>
<anothertag />
<body>
<monitor value="3" />
<mouse value="5" />
<chair>
<monoblock value="5" />
</chair>
<anotherbody>
<monitor value="3" />
<mouse value="5" />
<chair>
<monoblock value="5" />
</chair>
</anotherbody>
</body>
</parent>
输出是多余的。我该如何删除它?
p.Remove();
删除所有元素。谢谢
答案 0 :(得分:3)
试试这个
foreach (var item in doc.Descendants("body").ToList())
{
item.ReplaceAll(new XElement("anotherbody", item.Nodes()));
}
答案 1 :(得分:0)
我认为问题在于这一行
var p = doc.Descendants("body").Elements();
你不应该从你的后代中提取.Elements()
。将行更改为
var p = doc.Descendants("body");
它应该有效。但请记住,.Descendants()
将找到与指定名称匹配的所有标记,即使它们嵌套在其他标记内也是如此。
如果标记<body>
仅显示为<parent>
的子项,则可能没问题,如果不是,则按以下方式重写相关行会更好
var p = doc.Elements("body");