【发布时间】:2020-05-12 18:53:07
【问题描述】:
我有一个问题。
我有以下 XML 输入:
<root>
<name>Dennis</name>
<lastname>Some Lastname</lastname>
<age>28</age>
<hobbys>
<hobby>test1</hobby>
<hobby>test2</hobbyy>
<hobby>test3</hobby>
</hobbys>
<food>pizza</food>
<name>Bob</name>
<lastname>Some Lastname</lastname>
<age>48</age>
<hobbys>
<hobby>test4</hobby>
<hobby>test5</hobbyy>
<hobby>test6</hobby>
<hobby>test7</hobby>
<hobby>test8</hobby>
</hobbys>
<food>fries</food>
<footerText>blablabla</footerText>
</root>
并希望将特定节点的每个子节点都放入其自己的父节点(在这种情况下,我希望所有子节点都有一个父节点,因此所需的输出将是:
<root>
<name>Dennis</name>
<lastname>Some Lastname</lastname>
<age>28</age>
<hobbys>
<hobby>test1</hobby>
</hobbys>
<hobbys>
<hobby>test2</hobby>
</hobbys>
<hobbys>
<hobby>test3</hobby>
</hobbys>
<food>pizza</food>
<name>Bob</name>
<lastname>Some Lastname</lastname>
<age>48</age>
<hobbys>
<hobby>test4</hobby>
</hobbys>
<hobbys>
<hobby>test5</hobby>
</hobbys>
<hobbys>
<hobby>test6</hobby>
</hobbys>
<hobbys>
<hobby>test7</hobby>
</hobbys>
<hobbys>
<hobby>test8</hobby>
</hobbys>
<food>fries</food>
<footerText>blablabla</footerText>
</root>
获得所需结果的最简单方法是什么? 我尝试了以下方法:
var xmlStr = [XML STRING];
xmlDoc.LoadXml(xmlStr);
xmlDoc.FirstChild.InnerXml = string.Join("",
xmlDoc.SelectNodes("//hobby")
.Cast<XmlNode>()
.Select(n => n.OuterXml));
XmlElement elem;
foreach (XmlElement node in xmlDoc.SelectNodes("//root//hobby"))
{
xmlDoc.FirstChild.RemoveChild(node);
elem = xmlDoc.CreateElement("hobbys");
elem.AppendChild(node);
xmlDoc.FirstChild.AppendChild(elem);
}
但是,这只有在有一个爱好列表时才有效,并且它不会记住它的来源。我有点卡住了,所以如果有人可以帮助我,我会非常感激!
您好!
【问题讨论】:
-
好吧,看来你想要的输出是从正确的结构倒退了一步。您应该将每组个人数据(来自
... )放入单独的元素中,例如 <person>,并将<hoobys>保留在第一个示例中。 -
嘿,我想在我自己的应用程序中使用所需的输出,而当我加载 XML 时,它不适用于当前输出。将子节点放在自己的父节点中是解决我的问题的一种方法,问题是如何做到这一点:)
-
嗯,你应该可以通过使用插入而不是追加来做到这一点(如
InsertAfter)。 -
试过了,但我觉得我处理问题的方式总体上有些问题
标签: c# .net xml linq parent-child