XPath innerText忽略子孩子
我想使用xpath的text()attribute访问一个元素,其结构如下所示XPath innerText忽略子孩子,text,xpath,parent,innertext,Text,Xpath,Parent,Innertext,我想使用xpath的text()attribute访问一个元素,其结构如下所示 <root> <child> <lowerchild> <lowestchild> My text </lowestchild> </lowerchild> </child> </root> 应
<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()
,则上下文节点(是子节点
)将转换为字符串。这意味着连接所有文本节点子节点的子节点的值,而不仅仅是直接文本节点子节点。(有点像您的问题标题提到的DOMinnerText
,但不包括元素的开始/结束标记,也不包括属性。)因此,//child[contains(,'My text')]
将返回子元素。对不起,我正在把课文翻译成英语,因此我没有看到你的答案。@OP:没问题。。。我的回答中没有提到德语。不过,我不太明白你问题的最后一段。你能举一个完整的例子来说明你所说的从最低的中选择“较低的”是什么意思吗?@Iwan1993:这个答案有用吗?如果没有,你能更详细地解释一下你需要什么吗?(参见前面的注释。)对于“lower”lowerestchild元素,我指的是最低的子元素,或者是具有fitting名称的下一个父元素。但是谢谢你的回答,很好的解释和个人的赞许
//child[contains(., 'My text')]