以下xml是我的输入。
<units>
<author-group>
<root>
<author Seq="1">
<initials>J.</initials>
<surname>Kim</surname>
<given-name>Jiyeon</given-name>
</author>
<author Seq="2">
<initials>k.</initials>
<surname>Kim</surname>
<given-name>ki</given-name>
</author>
</root>
</author-group>
</units>
这里我只需删除标签,但我需要root标签子元素。
我的最终xml ,如下面的xml。
<units>
<author-group>
<author Seq="1">
<initials>J.</initials>
<surname>Kim</surname>
<given-name>Jiyeon</given-name>
</author>
<author Seq="2">
<initials>k.</initials>
<surname>Kim</surname>
<given-name>ki</given-name>
</author>
</author-group>
</units>
为此,我在下面提出了问题。 How to Remove Root Element in C#
我试过下面的代码。
XDocument document = new XDocument(author);
XElement firstChild = document.Root.Elements().First();
XDocument output = new XDocument(firstChild);
但是根元素没有删除。有没有其他方法可以删除根元素?不删除子元素?
答案 0 :(得分:1)
const string xml = @"<units>
<author-group>
<root>
<author Seq=""1"">
<initials>J.</initials>
<surname>Kim</surname>
<given-name>Jiyeon</given-name>
</author>
<author Seq=""2"">
<initials>k.</initials>
<surname>Kim</surname>
<given-name>ki</given-name>
</author>
</root>
</author-group>
</units>";
const string elementToRemove = "root";
const string addElementsInElement = "author-group";
var doc = XDocument.Parse(xml);
var matchingElement = doc
.Descendants()
.First(e => e.Element(elementToRemove) != null);
var innerElements = matchingElement.Elements().Elements().ToList();
doc
.Descendants()
.First(e => e.Element(elementToRemove) != null)
.RemoveNodes();
doc
.Descendants()
.First(e => e.Element(addElementsInElement) != null)
.Element(addElementsInElement)
.Add(innerElements);
答案 1 :(得分:0)
在您的示例代码中
document.Root // this will point at the <author-group> element
Elements() // this will point at the <root> element
所以,当你调用First()时,你要求的是第一个元素。 我想你需要再打电话
firstChild.Elements()
然后应该包含所有元素