我已经制作了一个信息图形,描绘了XPath中的各种轴。但是,我不确定它们是否正确。
我对following
,following-sibling
,preceding
和preceding-sibling
我的图表是否正确?
原始图片位于:http://imgur.com/4ekJxca (取自Pro XML Development with Java)
以下是我对我感到困惑的节点的理解:
descendant::
选择上下文节点的子节点和孙节点的节点(仅元素和文本)。
following::
选择后代未选择的任何节点(仅文本)。
following-sibling::
上下文节点的所有“兄弟”。也就是说,在上下文节点之后,作为与上下文节点相同的父节点的子节点的文本和元素节点。
preceding::sibling
上下文节点的所有“兄弟”。也就是说,在上下文节点之前,作为与上下文节点相同的父节点的子节点的文本和元素节点。
preceeding::
所有节点(仅文本)未沿ancestor::
轴出现且未嵌套在任何元素节点中。 (我相信我搞砸了这个)
<?xml version="1.0" encoding="UTF-8"?>
<catalog xmlns:journal="http://www.apress.com/catalog/journal" >
<journal:journal title="XML" publisher="IBM developerWorks">
<article journal:level="Intermediate"
date="February-2003">
<title>Design XML Schemas Using UML</title>
<author>Ayesha Malik</author>
</article>
</journal:journal>
<journal title="Java Technology" publisher="IBM developerWorks">
<article level="Advanced" date="January-2004">
<title>Design service-oriented architecture
frameworks with J2EE technology</title>
<author>Naveen Balani</author>
</article>
<article level="Advanced" date="October-2003">
<title>Advance DAO Programming</title>
<author>Sean Sullivan </author>
</article>
</journal>
</catalog>
答案 0 :(得分:2)
获得关于preceding
和following
轴的准确直觉的最佳方法是将XML想象为一组嵌套框或间隔,其中每个间隔从开始标记延伸到其匹配的结束标记。在此图片中,您可以看到任何两个不同的区间 a 和 b 必须完全属于以下关系之一:
a/descendant::b
); a/ancestor::b
); a/following::b
)。a/preceding::b
); 如果你遵循这个模型,你将永远不会怀疑XPath轴的语义。
顺便说一句,这就是为什么树模型对你的直觉不利:它没有把“嵌套框”范式放在最前面,所以很容易混淆。