【发布时间】:2010-12-31 06:09:50
【问题描述】:
鉴于此 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[text()='July' and //P1[@X < 90]]
将返回 true,也将返回 true
//Word[text()='July' and //P1[@X > 90]]
如何在 P1@X 属性上正确地约束它?
此外,假设我有多个 Page 元素,用于不同的页码。我将如何另外限制上述搜索以查找具有text()='July', P1@X < 90 和 Page@pageNumber=3 的节点?
【问题讨论】:
-
对于这个特定的 XML 可能不是每个读者都清楚的一个重要的事情是,因为这个 XML 使用混合内容模型,所以很难将元素与 XPath 匹配。我最近遇到了这个问题,并且对我的 XPath 生疏了,我正要得出结论,在我在下面找到 Michael Kay 的答案之前,无法匹配混合内容元素。我找不到任何其他关于混合内容和 XPath 的缺陷的参考资料。
-
你的问题回答了我的问题。在 XPath 中对字符串使用“单撇号”非常重要,而不是“双引号”。这真的非常重要。谢谢你的线索。