如何根据之前的标签值从连续的xml标签属性中提取数据

How to extract the data from a consecutive xml tag attribute based on the previous tag value

我无法让我的正则表达式适合以下用例。

<LOB>
            <LOBStatusInfo>
                <LOB>Mobile</LOB>
                <Status>Active</Status>
            </LOBStatusInfo>
            <LOBStatusINfo>
                <LOB>Voice</LOB>
                <Status>Active</Status>
            </LOBStatusInfo>
            <LOBStatusInfo>
                <LOB>Internet</LOB>
                <Status>Disconnect</Status>
            </LOBStatusInfo>
        </LOBStatus>

在上面的 XML 中,我只想提取与 Voice(处于活动状态)对应的状态。

到目前为止,我能够获得 LOB 本身,但没有获得相应的状态。

ps:我是新手,不够详细还请见谅。

我们不使用正则表达式解析 XML,请检查:Using regular expressions with HTML tags 相反,您可以使用 和适当的 xml 解析器。你的环境、语言是什么?

测试:

输入文件

 <LOB>
    <LOBStatus>
        <LOBStatusInfo>
            <LOB>Mobile</LOB>
            <Status>Active</Status>
        </LOBStatusInfo>
        <LOBStatusInfo>
            <LOB>Voice</LOB>
            <Status>Active</Status>
        </LOBStatusInfo>
        <LOBStatusInfo>
            <LOB>Internet</LOB>
            <Status>Disconnect</Status>
        </LOBStatusInfo>
    </LOBStatus>
</LOB>

命令

(只是一个示例,现在在 shell 中,但查询可以使用您选择的任何语言)

xmllint --xpath '//LOB[text()="Voice"]/../Status/text()' file.xml

xmllint --xpath '//LOB[text()="Voice"]/following-sibling::Status/text()' file.xml

输出:

Active