如何根据之前的标签值从连续的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
相反,您可以使用 xpath 和适当的 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
我无法让我的正则表达式适合以下用例。
<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
相反,您可以使用 xpath 和适当的 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