从XML文件中删除所有文本节点

Kri*_*shh 0 c# linq-to-xml

我想从XML文件中删除所有文本节点(但不是任何其他类型的节点).我怎样才能做到这一点?

示例输入:

<root>
<slideshow id="1">
<Image>hii</Image>
<ImageContent>this</ImageContent>
<Thumbnail>is</Thumbnail>
<ThumbnailContent>A</ThumbnailContent>
</slideshow>
<slideshow id="2">
<Image>hii</Image>
<ImageContent>this</ImageContent>
<Thumbnail>is</Thumbnail>
<ThumbnailContent>B</ThumbnailContent>
</slideshow>
</root> 
Run Code Online (Sandbox Code Playgroud)

预期产出:

<root>
<slideshow id="1">
<Image></Image>
<ImageContent></ImageContent>
<Thumbnail></Thumbnail>
<ThumbnailContent></ThumbnailContent>
</slideshow>
<slideshow id="2">
<Image></Image>
<ImageContent></ImageContent>
<Thumbnail></Thumbnail>
<ThumbnailContent></ThumbnailContent>
</slideshow>
</root> 
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 7

怎么样:

var doc = XDocument.Load("test.xml");
doc.DescendantNodes()
   .Where(x => x.NodeType == XmlNodeType.Text ||
               x.NodeType == XmlNodeType.CDATA)
   .Remove();
doc.Save("clean.xml");
Run Code Online (Sandbox Code Playgroud)

编辑:请注意,上面是在我意识到XCData派生之前XText,导致更简单:

var doc = XDocument.Load("test.xml");
doc.DescendantNodes()
   .OfType<XText>()
   .Remove();
doc.Save("clean.xml");
Run Code Online (Sandbox Code Playgroud)

  • 不应该`doc.DescendantNodes().OfType <XText>().Remove()`就够了? (2认同)