我目前的XML结构看起来像这样
<Parent>
<Info>
<Info-Data></Info-Data>
<Info-Data2></Info-Data2>
</Info>
<Message>
<Foo></Foo>
<Bar></Bar>
</Message>
<Message>
<Foo/>
<Bar/>
</Message>
</Parent>
我想要完成的是将每条消息分成它自己独特的XDocument。我希望它是
<Parent>
<Info />
<Message />
</Parent>
我尝试了以下操作。
XDocument xDoc = XDocument.Parse(myXMLString);
IEnumerable<XElement> elements = xDoc.Descendants(xDoc.Root.Name.NameSpace + "Message");
foreach(XElement element in elements)
{
XDocument newDoc = XDocument.Parse(element.ToString());
}
显然,这只能从Message和下面获取所有内容。我尝试使用Ancestors和AncestorsAndSelf,但他们总是包含两个消息。我应该做一个不同的电话吗?
答案 0 :(得分:1)
如果您的格式是这样修复的,那就不是那么糟糕了:
foreach(XElement element in elements)
{
XDocument newDoc = new XDocument
(new XElement(xDoc.Root.Name,
xDoc.Root.Element("Info"),
element));
// ...
}
它不是很好,但它并不可怕。另一种方法是克隆原始文档,删除所有Message元素,然后重复克隆“gutted”版本,并一次向新克隆添加一个元素:
XDocument gutted = new XDocument(xDoc);
gutted.Descendants(xDoc.Root.Name.Namespace + "Message").Remove();
foreach(XElement element in elements)
{
XDocument newDoc = new XDocument(gutted);
newDoc.Root.Add(element);
// ...
}