Xml 使用前面和后面约束XPath同级关系

Xml 使用前面和后面约束XPath同级关系,xml,xpath,siblings,Xml,Xpath,Siblings,我需要了解如何创建一个XPath,以便只返回根_级别元素的id值,该元素的值为2,紧跟在根_级别1的值之后。我在网站上花了几个小时回顾了之前对类似帖子的回复,但它们没有我遇到的相同类型的限制 下面是一个示例XML片段。它们可以长得多: <?xml version="1.0" encoding="UTF-8"?> <result> <item> <id>659478</id>

我需要了解如何创建一个XPath,以便只返回根_级别元素的id值,该元素的值为2,紧跟在根_级别1的值之后。我在网站上花了几个小时回顾了之前对类似帖子的回复,但它们没有我遇到的相同类型的限制

下面是一个示例XML片段。它们可以长得多

<?xml version="1.0" encoding="UTF-8"?>
    <result>
            <item>
                <id>659478</id>
                <name>Company A</name>
                <root_level>1</root_level>
                </item>
            <item>
                <id>692557</id>
                <root_level>2</root_level>
            </item>
            <item>
                <id>659482</id>
                <root_level>2</root_level>
            </item>
            <item>
                <id>666534</id>
                <root_level>3</root_level>
            </item>
            <item>
                <id>665260</id>
                <root_level>3</root_level>
            </item>
            <item>
                <id>665773</id>
                <root_level>3</root_level>
            </item>
            <item>
                <id>635003</id>
                <name>Company B</name>
                <root_level>1</root_level>
            </item>
            <item>
                <id>635005</id>
                <root_level>2</root_level>
            </item>
            <item>
                <id>635015</id>
                <root_level>2</root_level>
            </item>
            <item>
                <id>671626</id>
                <root_level>2</root_level>
            </item>
            <item>
                <id>584793</id>
                <name>Company C</name>
                <root_level>1</root_level>
            </item>
            <item>
                <id>623716</id>
                <root_level>2</root_level>
            </item>
            <item>
                <id>698585</id>
                <root_level>3</root_level>
            </item>
    </result>
此外,我被迫在解决方案中使用XPath 1.0


如果有人能给我指出正确的方向,限制返回的root_级别2结果仅与基于后代顺序的特定root_级别1名称相关的结果相匹配,我将不胜感激。谢谢。

您可以尝试用这种方法返回与特定公司对应的所有根级别2 id元素,即
'company A'

//item[root_level=2][preceding-sibling::item[root_level=1][1][name='Company A']]/id
  • //项[root\u level=2]
    :查找所有root-level-2
  • [前面的兄弟姐妹::item[name][1][name='Company A']
    :…前面最近的兄弟姐妹根级别为1
    等于
    “Company A”
  • /id
    :然后返回
    子元素

例如,需要的输出是什么?谢谢您的回复。我只需要正确的root_level 2 item元素的id值,因此对于“Company A”:692557 659482,感谢您的介绍,以及关于position值如何与前面的同级元素一起工作的解释。那绝对是一个灯泡熄灭的时刻。。。
//item[root_level=2][preceding-sibling::item[root_level=1][1][name='Company A']]/id