2

在此处输入图像描述 我制作了一个描述 XPath 中各个轴的信息图。但是,我不确定它们是否正确。

following我对,following-siblingpreceding感到困惑preceding-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>
4

1 回答 1

2

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

  1. a包含b ( a/descendant::b);
  2. a包含在b ( a/ancestor::b) 中;
  3. a后跟b ( a/following::b)。
  4. a前面有b ( a/preceding::b);

如果您坚持这个模型,您将永远不会怀疑 XPath 轴的语义。

顺便说一句,这就是为什么树模型不利于您的直觉:它没有将“嵌套框”范式放在首位,因此很容易混淆。

于 2013-05-13T10:59:31.817 回答