我发现了几个与我有些相似的问题,但我无法调整他们的解决方案。
我有一个XML文档,其中有多个具有相同名称的元素。我无法提供确切的文档内容,但this question有一个等同的内容:
<table name="XFile">
<row sourceLineNumber="D:\bla\bla\">
<field>Borderish.fo</field>
<field>Documents</field>
<field>1</field>
<field>This line here 1</field>
</row>
<row sourceLineNumber="D:\blah\blah\">
<field>Charterish</field>
<field>Documents</field>
<field>1</field>
<field>This line here 2</field>
</row>
</table>
我需要能够执行与SQL语句SELECT field[3] WHERE field[0] = "Charterish"
等效的操作。
如果有帮助,我的文档似乎确实有一个进一步定义的模式,它将每个<field>
值映射到诸如“IP地址”之类的名称;我还没有找到有关如何使用此映射的任何信息,但我确信有一种方法。
到目前为止,我一直在尝试使用xmlstarlet进行解决;但是,如果更容易,我也可以选择使用python。请考虑我在bash / python中的级别有点基础,而我的XML级别非常基础。
答案 0 :(得分:0)
假设您有一个包含此部分的XML文档(您应该是提供简化但仍然相关的XML的人):
<table name="XFile">
<row sourceLineNumber="D:\bla\bla\">
<field>Borderish.fo</field>
<field>Documents</field>
<field>1</field>
<field>This line here 1</field>
</row>
<row sourceLineNumber="D:\blah\blah\">
<field>Charterish</field>
<field>Documents</field>
<field>1</field>
<field>This line here 2</field>
</row>
</table>
并假设您的XML没有默认命名空间,那么您可以调整您链接的问题中提供的解决方案使用此XPath:
//row[field[1]='Charterish']/field[4]
上面的XPath是伪SQL查询的翻译:
SELECT field[3] WHERE field[0] = "Charterish"
请注意,XPath位置索引从1
开始,而不是0
。