...
<ul>
<li>A
<ul>
<li>B
</li>
</ul>
</li>
<li>C
</li>
</ul>
...
XPath
表达式仅提供外部<li>
元素的子<ul>
个元素?我不想要值为<li>
的孙子B
。
到目前为止,我有//ul[1]/li
,但这也给了我孙子。
答案 0 :(得分:2)
选择外部ul
,然后选择子li
:
/ul/li
如果ul
不是实际HTML中的根元素,或者您希望按字面选择外部ul
,即ul
,那就不是有祖先其他ul
元素,那么你可以这样做:
//ul[not(ancestor::ul)]/li
如果只有一个最外层ul
,即ul
没有兄弟ul
或同一级别的任何其他ul
,您可以使用:
(//ul)[1]/li
答案 1 :(得分:1)
XPath用于选择,而不是转换。您无法使用XPath创建任意XML;您只能在输入文档出现时选择节点(并将这些节点传递给某些函数)。
因此,您无法选择没有子元素的元素。
选择第一个li
的所有ul
元素(如建议的har07):
(//ul)[1]/li
从那些只是他们的直接文本孩子中选择:
(//ul)[1]/li/text()
或者只是那些不仅仅是空白的直接文本孩子:
(//ul)[1]/li/text()[normalize-space()]