使用 sed 连接 xml 标签 [重复]

Posted

技术标签:

【中文标题】使用 sed 连接 xml 标签 [重复]【英文标题】:Use sed to concatenate xml tags [duplicate] 【发布时间】:2021-12-11 18:02:41 【问题描述】:

我正在尝试从以下 xml 标记中提取和连接 <id><name> 的值

<applications><application>
  <id>292</id>
  <name>Test</name>
  <accountGuid>2-b01e-2ef14d11c5e0</accountGuid>
</application>
<application>
  <id>195</id>
  <name>State</name>
  <accountGuid>2-b01e-2ef14d11c5e0</accountGuid>
</application>
<application>
  <id>266</id>
  <name>Home</name>
  <accountGuid>2-b01e-2ef14d11c5e0</accountGuid>
</application>
</applications>

想要的输出是

292:Test
195:state
266:Home

我使用下面的 sed 提取,但它给了我输出

sed -n 's:.*&lt;id&gt;\(.*\)&lt;/id&gt;.*:\1:p;s:.*&lt;name&gt;\(.*\)&lt;/name&gt;.*:\1:p'

292
Test
195
state
266
Home

请大家帮忙看看我应该怎么做才能获得所需的输出?

【问题讨论】:

Don't Parse XML/html With Regex. 我建议使用 XML/HTML 解析器 (xmlstarlet, xmllint ...)。 【参考方案1】:

使用 xmlstarlet:

xmlstarlet select --text --template --match "/applications/application" --value-of "concat(id,':',name)" -n file.xml

输出:

292:测试 195:状态 266:首页

见:xmlstarlet select --help

【讨论】:

以上是关于使用 sed 连接 xml 标签 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Jackson 处理命名空间重复的 xml 标签

解析带有重复标签的 XML 文件

XML标签格式错误[重复]

如何将sed更改限制为第一组[重复]

在Java中解析XML并忽略标签[重复]

获取标签和值? XML [重复]