You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用xmlstarlet删除包含<blogger:type>COMMENT</blogger:type>的<entry>节点

清理Blogger导出XML:删除含评论的<entry>节点

需求:清理Blogger博客导出的XML文件,删除所有包含<blogger:type>COMMENT</blogger:type>子节点的<entry>节点(对应评论内容),保留含<blogger:type>POST</blogger:type>的<entry>节点(对应文章内容)。

当前问题:执行命令xmlstarlet edit -d "//blogger:type[text()='COMMENT']" input.xml > output.xml仅删除<blogger:type>COMMENT</blogger:type>节点,无法删除整个<entry>节点。

解决方案

需要调整XPath表达式,直接定位到包含目标<blogger:type>的<entry>节点,而非仅定位<blogger:type>节点本身。以下两种命令均可实现需求:

方法1:通过父节点定位

xmlstarlet edit -d "//blogger:type[text()='COMMENT']/.." input.xml > output.xml

/..表示选取当前节点的父节点,这里就是包含<blogger:type>COMMENT</blogger:type>的<entry>节点,执行后会直接删除整个<entry>。

方法2:直接筛选目标<entry>节点

xmlstarlet edit -d "//entry[blogger:type='COMMENT']" input.xml > output.xml

这种方式更直观,XPath直接筛选出所有包含<blogger:type>子节点且值为COMMENT的<entry>节点,一次性完成删除。

示例验证

输入XML示例:

<?xml version='1.0' encoding='utf-8'?>
<feed xmlns='http://www.w3.org/2005/Atom' xmlns:blogger='http://schemas.google.com/blogger/2018'>
  <id>tag:blogger.com,1999:blog-18962386</id>
  <title>ImportTestv1</title>

  <!-- 保留该节点 -->
  <entry>
    <id>tag:blogger.com,1999:blog-18962386.post-468340</id>
    <blogger:type>POST</blogger:type>
    <blogger:status>LIVE</blogger:status>
    <author>
      <name>Author</name>
      <uri></uri>
      <blogger:type>BLOGGER</blogger:type>
    </author>
    <title></title>
    <content type='html'>Test Post 3</content>
    <blogger:metaDescription/>
    <blogger:created>2025-09-05T14:02:59.354Z</blogger:created>
    <published>2025-09-04T23:09:00Z</published>
    <updated>2025-09-05T14:02:59.354Z</updated>
    <blogger:location/>
    <category scheme='tag:blogger.com,1999:blog-17477683' term='News'/>
    <blogger:filename>/2025/09/post.html</blogger:filename>
    <link/>
    <enclosure/>
    <blogger:trashed/>
  </entry>

  <!-- 删除整个该节点 -->
  <entry>
    <id>tag:blogger.com,1999:blog-18962386.post-3978997</id>
    <blogger:parent>tag:blogger.com,1999:blog-18962386.post-468340</blogger:parent>
    <blogger:inReplyTo/>
    <blogger:type>COMMENT</blogger:type>
    <blogger:status>LIVE</blogger:status>
    <author>
      <name>Author</name>
      <blogger:type>BLOGGER</blogger:type>
    </author>
    <content type='html'>Test Comment2 Test Comment2 Test Comment2</content>
    <blogger:created>2025-09-14T14:42:53.755Z</blogger:created>
    <published>2025-09-14T14:42:53.755Z</published>
    <updated>2025-09-14T14:42:53.755Z</updated>
    <blogger:trashed/>
  </entry>

</feed>

执行上述任意命令后,输出XML将仅保留含<blogger:type>POST</blogger:type>的<entry>节点,评论对应的<entry>会被完全删除。

内容的提问来源于stack exchange,提问作者user5853892

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 08:43:24