shell脚本从xml文件中提取特定标记信息

时间:2018-01-18 10:21:40

标签: xml shell xml-parsing

我想提取所有相应<InFrame>代码的<SOUNDCHEK>代码信息数据

文件中所有<Inframe>标记的数据为:-1 0 2 4 7

但我只希望来自<Inframe>标记的<SOUNDCHEK>信息:2 4 7 [所需输出]

<APP>
    <Name>MainCheck</Name>
    <ActiveField>True</ActiveField>
    <InFrame>-1</InFrame>
    <CAMRECORD>
        <Name>Camera01</Name>
        <ActiveField>True</ActiveField>
        <InFrame>0</InFrame>
    </CAMRECORD>
    <SOUNDCHEK>
        <Name>Sound1.wav</Name>
        <ActiveField>True</ActiveField>
        <InFrame>2</InFrame>
    </SOUNDCHEK>
    <SOUNDCHEK>
        <Name>Sound2.wav</Name>
        <ActiveField>True</ActiveField>
        <InFrame>4</InFrame>
    </SOUNDCHEK>
    <SOUNDCHEK>
        <Name>Sound3.wav</Name>
        <ActiveField>True</ActiveField>
        <InFrame>7</InFrame>
    </SOUNDCHEK>
</APP>

2 个答案:

答案 0 :(得分:1)

使用 xmlstalet 工具:

xmlstarlet sel -t -v "//SOUNDCHEK/InFrame" -n input.xml
  • //SOUNDCHEK/InFrame - xpath表达式,用于选择InFrame个节点的子节点的所有SOUNDCHEK个节点

输出:

2
4
7

http://xmlstar.sourceforge.net/doc/UG/xmlstarlet-ug.html#idm47077139652416

答案 1 :(得分:0)

尝试使用xmllint并使用xpath选择所需的数据。

xmllint --xpath '/APP/SOUNDCHECK/InFrame/text()' file.xml