shell脚本-获取xml中标签之间的值

shell脚本-获取xml中标签之间的值

我的 xml 文件采用以下格式。我想获取<fullName>..</fullName>ABC 和 DEF 标签之间的值。我在 while 循环中编写此代码以到达每一行,因为我需要fullName在另一个变量中获取每个 xml 标记的值。grep将一起显示所有值。

谢谢

<fields>
    <fullName>ABC</fullName>
    <trackFeedHistory>false</trackFeedHistory>
    <type>TY</type>
</fields>

<fields>
    <fullName>DEF</fullName>
    <trackFeedHistory>false</trackFeedHistory>
    <type>XY</type>
</fields>

答案1

使用 xml 解析器,例如xmlstarlet:

xmlstarlet sel -t -m '//fields' -v 'fullName' -n file

请注意,您的xml文件应该是有效的,但这不适用于您的示例,因为您缺少根标签。以下内容将与上述命令一起使用:

<root>
<fields>
    <fullName>ABC</fullName>
    <trackFeedHistory>false</trackFeedHistory>
    <type>TY</type>
</fields>

<fields>
    <fullName>DEF</fullName>
    <trackFeedHistory>false</trackFeedHistory>
    <type>XY</type>
</fields>
</root>

输出:

ABC
DEF

感谢@roaimas 评论,我在不知道字段数量的情况for下创建了一个循环,其结果如下:xmlstarlet

numFields=$(xmlstarlet sel -t -m '//fields' -o "." file | wc -c)
for i in $(seq 1 $numFields); do
    var=$(xmlstarlet sel -t -m "//fields[$i]" -v "fullName" file)
    printf '%s\n' "$var" # or do something else
done

相关内容