我正在尝试使用XPath遍历XML。我想访问/ group / isRequired [text()=' Optional']并向上移动一级以获取/ bool节点
我尝试过类似下面的一些内容,但似乎无法得到它...感谢任何输入。
我基本上想要在一个语句中验证Library节点,group + isRequired节点和bool节点。
//root/sample[library[text()='2']]/group/isRequired[text()='Optional']//bool[text()='true']
//root/sample[library[text()='2']]/group/isRequired[text()='Optional']../bool[text()='true']
//root/sample[library[text()='2']]/group/isRequired[text()='Optional']/bool[text()='true']
//root/sample[library[text()='2']]/group/isRequired[text()='Optional']/../bool[text()='true']
<root>
<sample>
<id>1</id>
<library>2</library>
<ruleName>Default</ruleName>
<group>
<groupID>1</groupID>
<groupName>orange</groupName>
<isRequired>Optional</isRequired>
</group>
<variant>1</variant>
<bool>true</bool>
</sample>
</root>
答案 0 :(得分:1)
您需要向上移动两步:
/root/sample[library[text()='2']]/group/isRequired[text()='Optional']/../../bool[text()='true']
但是将多个条件放在一个谓词中会更清晰:
/root/sample[library[text()='2'] and group/isRequired[text()='Optional'] and bool[text()='true']]
答案 1 :(得分:1)
简单:
/root/sample[library = "2" and group/isRequired = "Optional" and bool = "true"]
您不必使用/text()
来获取XPath中每个节点的值。根据您的XML是否具有架构,您不需要将文字值放在引号中。没有它,一切都是字符串值,所以为了安全起见,我把它们放在引号中。
答案 2 :(得分:1)
您可以通过sample
子节点过滤group/isRequired
节点来使用不同的路由,然后您可以从该sample
节点继续前往bool
节点:< / p>
//root/sample[library='2' and group/isRequired='Optional']/bool[.='true']