Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xml XPath中的缩写语法_Xml_Xpath - Fatal编程技术网

Xml XPath中的缩写语法

Xml XPath中的缩写语法,xml,xpath,Xml,Xpath,//olist/items返回什么 嗯,/是后代或self::node()/的缩写,因此它返回一组节点,这些节点是我的上下文节点的后代。在此之后,它的路径中必须有olist item表示child::item,因此它返回我的上下文节点的子节点(即//olist/)。因此,最后它返回项目节点,即我的起始上下文节点的所有子节点的子节点,或其路径中有olist的一个descndant的子节点 对吗?//olist/items 此XPath将返回名为项的元素集合,这些元素是名为olist的元素的子节点,

//olist/items
返回什么

嗯,
/
后代或self::node()/
的缩写,因此它返回一组节点,这些节点是我的上下文节点的后代。在此之后,它的路径中必须有
olist

item
表示
child::item
,因此它返回我的上下文节点的子节点(即
//olist/
)。因此,最后它返回项目节点,即我的起始上下文节点的所有子节点的子节点,或其路径中有
olist
的一个descndant的子节点


对吗?

//olist/items

此XPath将返回名为
项的元素集合,这些元素是名为
olist
的元素的子节点,这些元素是您正在查询的XML文档根节点的后代

在此示例XML中:

<root>
    <olist>
        <test/>
        <items value="A"/>
    </olist>
    <other>
        <inside>
            <items value="B"/>
            <olist>
                <items value="C"/>
            </olist>
        </inside>
    </other>
</root>

//olist/items
XPath将选择
items
元素,其
属性为AC,因为它们是
olist
元素的子元素

它将不会选择具有
value
属性B
items
元素,因为该元素没有所需的父元素
olist

在语法上,
/
表示it状态上的
/后代或self::node()/

子体或自轴表示上下文节点及其所有子体。不包括属性和命名空间节点-属性节点的父节点是元素节点,但属性节点不是其父节点的子节点

/olist
表示
child::olist
-子轴的定义为

子轴表示上下文节点的子节点。如果XPath表达式未指定轴,则默认情况下理解子轴。因为只有根节点或元素节点有子节点,所以任何其他使用都不会选择任何内容


//olist/items

此XPath将返回名为
项的元素集合,这些元素是名为
olist
的元素的子节点,这些元素是您正在查询的XML文档根节点的后代

在此示例XML中:

<root>
    <olist>
        <test/>
        <items value="A"/>
    </olist>
    <other>
        <inside>
            <items value="B"/>
            <olist>
                <items value="C"/>
            </olist>
        </inside>
    </other>
</root>

//olist/items
XPath将选择
items
元素,其
属性为AC,因为它们是
olist
元素的子元素

它将不会选择具有
value
属性B
items
元素,因为该元素没有所需的父元素
olist

在语法上,
/
表示it状态上的
/后代或self::node()/

子体或自轴表示上下文节点及其所有子体。不包括属性和命名空间节点-属性节点的父节点是元素节点,但属性节点不是其父节点的子节点

/olist
表示
child::olist
-子轴的定义为

子轴表示上下文节点的子节点。如果XPath表达式未指定轴,则默认情况下理解子轴。因为只有根节点或元素节点有子节点,所以任何其他使用都不会选择任何内容

item表示child::item,因此它返回我的上下文节点(即//olist/)的子节点。因此,最后它返回项节点,即我的起始上下文节点的所有子节点的子节点或其子节点中路径中包含olist的子节点

对吧?

这几乎是正确的-不仅结果集中的
元素“
olist
在其路径中”(我理解为:必须是
olist
的后代),它们还必须是
olist
的直接子元素


然后让我们澄清关于“根节点”的混淆:

Matt Jones在解释
/
时使用了“根节点”,这并不是指XML示例中最外层的元素。只有经过证实,最外层的元素也被称为根

“根节点”或“文档节点”不同于XML文档的最外层元素。最外层的元素实际存在于文档中,所有XML元素和属性都在其中

文档节点在文档中不可见,它是表示整个XML文档的抽象概念。XML文档中的所有节点都是文档节点的后代

另一方面,并非所有节点都是最外层元素的后代:例如,最外层元素之外可能有处理指令或注释。但这些处理指令和注释包含在文档节点中


现在,
/
表示上下文节点或其任何子节点,如您所知。在这种情况下,文档节点将是路径表达式的上下文(如果不是您想要的,请在其前面加上
/

因此表达式
//item
表示
/genderant或self::node()/child::item
,意思是

选择名称为
item
的任何元素节点,该节点是XML结构中任意节点的子节点

此类
元素的父元素将是文档节点(在本例中,
元素将是最外层的元素)或任何元素节点


在XPath1.0中,XML文档的抽象容器