我对XPath轴的理解是否正确?

时间:2013-05-13 10:46:04

标签: xpath

enter image description here 我已经制作了一个信息图形,描绘了XPath中的各种轴。但是,我不确定它们是否正确。

我对followingfollowing-siblingprecedingpreceding-sibling

感到困惑

我的图表是否正确?

原始图片位于:http://imgur.com/4ekJxca (取自Pro XML Development with Java)

以下是我对我感到困惑的节点的理解:
descendant::选择上下文节点的子节点和孙节点的节点(仅元素和文本)。

following::选择后代未选择的任何节点(仅文本)。

following-sibling::上下文节点的所有“兄弟”。也就是说,在上下文节点之后,作为与上下文节点相同的父节点的子节点的文本和元素节点。

preceding::sibling上下文节点的所有“兄弟”。也就是说,在上下文节点之前,作为与上下文节点相同的父节点的子节点的文本和元素节点。

preceeding::所有节点(仅文本)未沿ancestor::轴出现且未嵌套在任何元素节点中。 (我相信我搞砸了这个)

XML

<?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>

1 个答案:

答案 0 :(得分:2)

获得关于precedingfollowing轴的准确直觉的最佳方法是将XML想象为一组嵌套框或间隔,其中每个间隔从开始标记延伸到其匹配的结束标记。在此图片中,您可以看到任何两个不同的区间 a b 必须完全属于以下关系之一:

  1. 包含 b a/descendant::b);
  2. a 包含在 b a/ancestor::b);
  3. a 后跟 b a/following::b)。
  4. a 前面有 b a/preceding::b);
  5. 如果你遵循这个模型,你将永远不会怀疑XPath轴的语义。

    顺便说一句,这就是为什么树模型对你的直觉不利:它没有把“嵌套框”范式放在最前面,所以很容易混淆。