给定这个XML:
<DocText> <WithQuads> <Page pageNumber="3"> <Word> July <Quad> <P1 X="84" Y="711.25" /> <P2 X="102.062" Y="711.25" /> <P3 X="102.062" Y="723.658" /> <P4 X="84.0" Y="723.658" /> </Quad> </Word> <Word> </Word> <Word> 30,<Quad> <P1 X="104.812" Y="711.25" /> <P2 X="118.562" Y="711.25" /> <P3 X="118.562" Y="723.658" /> <P4 X="104.812" Y="723.658" /> </Quad> </Word> </Page> </WithQuads>
我想找到具有’July’文本和Quad / P1 / X属性大于90的节点。因此,在这种情况下,它不应该返回任何匹配。然而,如果我使用GT(>)或LT(<),我得到第一个Word元素的匹配。如果我使用eq(=),我得到没有匹配。 所以:
//Word[text()='July' and //P1[@X < 90]]
将返回true,就这样
//Word[text()='July' and //P1[@X > 90]]
我如何在P1 @ X属性上正确地限制这个?
此外,假设我有多个Page元素,用于不同的页码。我如何另外限制上述搜索以找到具有text()=’July’,P1 @ X < 90,Page @ pageNumber = 3?
一般来说,我会考虑使用一个无前缀的//作为一个不好的气味在XPath。
尝试这个:-
/DocText/WithQuads/Page/Word[text()='July' and Quad/P1/@X > 90]
你的问题是,你使用// P1 [@X< 90],它从文档的开始处开始,并开始寻找任何P1,因此它总是成立的。类似地// P1 [@X> 90]总是为真。
原文地址:https://www.jb51.cc/xml/293874.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。