Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.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
xpath表达式'//祖先::*[@id][1]';实际上是指_Xpath - Fatal编程技术网

xpath表达式'//祖先::*[@id][1]';实际上是指

xpath表达式'//祖先::*[@id][1]';实际上是指,xpath,Xpath,回答a时,我注意到以下表达式上有奇怪的libxml行为: //ancestor::*[@id][1] 对于给定的上下文节点。我试图理解这个表达的真正含义 以下是PHP中的一个片段及其调用结果: $html = <<<HTML <div id="div1"> <div id="div2"> <p id="p1">Content</p> </div> <div id="div

回答a时,我注意到以下表达式上有奇怪的libxml行为:

//ancestor::*[@id][1]
对于给定的上下文节点。我试图理解这个表达的真正含义

以下是PHP中的一个片段及其调用结果:

$html = <<<HTML
<div id="div1">
    <div id="div2">
        <p id="p1">Content</p>
    </div>
    <div id="div3">
        <p id="p2">Content</p>
    </div>
</div>
HTML;

$doc = new DOMDocument();
$doc->loadHTML($html);
$xpath = new DOMXpath($doc);

$contextNode = $doc->getElementById('p1');
$list = $xpath->query('//ancestor::*[@id][1]', $contextNode);

printf("NodeList length: %d\n", $list -> length);
foreach ($list as $node) {
    printf ("item/@id -> %s\n", $node -> getAttribute('id'));
}

//祖先::*[@id][1]
/genderant或self::node()/祖先::*[@id][1]
的缩写形式,因此上下文节点仅与确定其根节点或文档节点相关
/
,然后在第一步
genderand或self::node()
节点集由文档节点及其所有类型的子节点(元素节点、文本节点、注释节点、处理指令节点)组成,然后每个节点的下一步确定
祖先::*[@id][1]
,即所有具有
id
属性的祖先元素的第一个

//祖先:*[@id][1]
/genderant或self::node()/祖先:*[@id][1]
的缩写形式,因此上下文节点仅与确定其根节点或文档节点相关
/
,然后在第一步
genderand或self::node()
节点集由文档节点及其所有类型的子节点(元素节点、文本节点、注释节点、处理指令节点)组成,然后每个节点的下一步确定
祖先::*[@id][1]
,即所有具有
id
属性的祖先元素的第一个

是的,你是对的,我自己已经意识到了这一点。但是谢谢你!是的,你是对的,我自己已经意识到了这一点。但是谢谢你!
NodeList length: 5
item/@id -> div1
item/@id -> div2
item/@id -> p1
item/@id -> div3
item/@id -> p2