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 innerText忽略子孩子_Text_Xpath_Parent_Innertext - Fatal编程技术网

XPath innerText忽略子孩子

XPath innerText忽略子孩子,text,xpath,parent,innertext,Text,Xpath,Parent,Innertext,我想使用xpath的text()attribute访问一个元素,其结构如下所示 <root> <child> <lowerchild> <lowestchild> My text </lowestchild> </lowerchild> </child> </root> 应

我想使用xpath的text()attribute访问一个元素,其结构如下所示

<root>
    <child>
        <lowerchild>
            <lowestchild>
                My text
            </lowestchild>
        </lowerchild>
    </child>
</root>
应该返回子元素。及

//lowerchild[contains(text(), 'My text')] 
应返回lowerchildelement

我用HTMLAgilityPack尝试了XPath命令,但它们找不到这些元素

我的小项目的最终结果是一个小型xpath搜索程序,因此用户给出了元素的名称、属性和值,因此,如果您可以仅使用这些信息为我提供一个解决方案,那就太好了。它可以是任何随机结构。如果元素名称加倍,就像我们有2个最低级的子元素一样,那么我想从最低的子元素中选择“较低级”的一个。希望你能帮助我

而不是

//child[contains(text(), 'My text')]
看起来你想要的

//child[contains(., 'My text')]
XPath表达式
text()
(带有隐式
子节点::
轴)选择作为上下文节点子节点的任何文本节点。在上面的示例中,它仅选择作为
子元素
的直接子元素的文本节点。在您显示的XML中,
child
元素有两个子文本节点,
lowerchild
元素位于它们之间。这两个文本节点都只包含空格,因此,根据设置,某些处理器可能会删除它们

如果将节点集或序列作为第一个参数传递给
contains(a,b)
,则它将获取第一个节点并将其转换为字符串。因此,您的参数将转换为仅包含空格的字符串,或者转换为空字符串(如果仅包含空格的文本节点被剥离)


但是如果将
作为第一个参数传递给
contains()
,而不是
text()
,则上下文节点(是
子节点
)将转换为字符串。这意味着连接所有文本节点子节点
的子节点的值,而不仅仅是直接文本节点子节点。(有点像您的问题标题提到的DOM
innerText
,但不包括元素的开始/结束标记,也不包括属性。)因此,
//child[contains(,'My text')]
将返回
子元素。

对不起,我正在把课文翻译成英语,因此我没有看到你的答案。@OP:没问题。。。我的回答中没有提到德语。不过,我不太明白你问题的最后一段。你能举一个完整的例子来说明你所说的从最低的中选择“较低的”是什么意思吗?@Iwan1993:这个答案有用吗?如果没有,你能更详细地解释一下你需要什么吗?(参见前面的注释。)对于“lower”lowerestchild元素,我指的是最低的子元素,或者是具有fitting名称的下一个父元素。但是谢谢你的回答,很好的解释和个人的赞许
//child[contains(., 'My text')]