【问题标题】:Remove all text nodes from XML file从 XML 文件中删除所有文本节点
【发布时间】:2011-10-13 15:38:41
【问题描述】:

我想从 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> 

预期输出:

<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> 

【问题讨论】:

  • 我稍微改写了你的问题。如果结果不符合您的要求,请撤消。

标签: c# linq-to-xml


【解决方案1】:

怎么样:

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

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

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

【讨论】:

  • 不应该doc.DescendantNodes().OfType&lt;XText&gt;().Remove() 就够了吗?
  • @MartinHonnen:确实 - 我没有注意到 XCData 派生自 XText。将编辑。
【解决方案2】:

这个问题应该有帮助:Linq to XML - update/alter the nodes of an XML Document

您可以使用 Linq 打开文档并更改值或完全删除节点。

【讨论】:

    猜你喜欢
    • 2013-02-19
    • 1970-01-01
    • 2023-03-24
    • 2018-03-17
    • 1970-01-01
    • 2016-11-05
    • 2020-01-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多