如何删除 XML 文件中的所有标签以仅显示所需的文本

如何删除 XML 文件中的所有标签以仅显示所需的文本

我应该使用什么命令来删除所有标签以仅显示我想要显示的内容。有数百个条目,只想显示 --name-- 标签。以下是单个条目的示例。

原创路线

    <game id="149526">
    <path>./1943mii.zip</path>
    <name>1943: The Battle of Midway Mark II</name>
    <desc>1943: The Battle of Midway Mark II is an unofficial  US version of the 1943 kai.</desc>
    <image>./images/1943mii-image.png</image>
    <video>./videos/1943mii-video.mp4</video>
    <marquee>./images/1943mii-marquee.png</marquee>
    <thumbnail>./images/1943mii-thumb.png</thumbnail>
    <rating>0.5</rating>
    <releasedate>19870101T000000</releasedate>
    <developer>Capcom</developer>
    <publisher>Capcom</publisher>
    <genre>Shoot'em up / Vertical</genre>
    <arcadesystemname>capcom</arcadesystemname>
    <players>1-2</players>
    <md5>5152b779738392fe2d6471b8c11a8b10</md5>
    <lang>en</lang>
    <region>us</region>
    </game>

需要线路

    1943: The Battle of Midway Mark II

答案1

  • Ctrl+H
  • 找什么:<game.+?<name>(.+?)</name>.+?</game>
  • 用。。。来代替:$1
  • 查看 相符
  • 查看 环绕
  • 查看 正则表达式
  • 查看 . matches newline
  • Replace all

解释:

<game       # open tag
.+?         # 1 or more any character, not greedy
<name>      # tag
(.+?)       # group 1, 1 or more any character, not greedy
</name>     # close tag
.+?         # 1 or more any character, not greedy
</game>     # close tag

替代品:

$1      # content of group 1 (i.e. the name)

截图(之前):

在此处输入图片描述

截图(之后):

在此处输入图片描述

答案2

在大多数情况下,XML 感知实用程序(例如)xmlstarlet是首选grep。无法保证游戏元素会位于其自己的行上。

$ xmlstarlet sel -t -v "/game/name" -n file.xml
1943: The Battle of Midway Mark II
$ 

相关内容