在bash中查询具有多个同名元素的XML文档

2024-06-11 19:06:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我发现有几个问题和我的有些相似,但我没能调整他们的解决方案。你知道吗

我有一个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 address”;我还没有找到任何关于如何使用这个映射的信息,但我确信有办法。你知道吗

到目前为止,我一直在尝试使用xmlstarlet解决这个问题;但是,如果这更容易的话,我也可以选择使用python。请认为我在bash/python中的级别是基本的,在XML中的级别是非常基本的。你知道吗


Tags: 文档名称field内容herelinetablexml
1条回答
网友
1楼 · 发布于 2024-06-11 19:06:34

假设您有一个包含此部分的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开始。你知道吗

相关问题 更多 >