我需要了解如何创建一个XPath,以仅返回值为2的root_level元素的id值,该值紧跟在root_level1值之后。我在网站上花了几个小时回顾了之前对类似帖子的回复,但它们没有我遇到的相同类型的限制。
下面是一个示例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的变体,但这需要始终知道下一个root_level1名称。注意,也可能没有以下root_level 3值。唯一的常量是root_level 1始终存在。
//item[root_level=2][preceding-sibling::item[name='Company A'] and following-sibling::item[name='Company B']]/id
此外,我被迫在解决方案中使用XPath 1.0。
如果有人能给我指明正确的方向,将返回的root_level 2结果限制为仅与特定root_level1名称相关的结果相匹配,我将不胜感激。谢谢