XPath只获取<ul>结构中的子项

时间:2016-06-17 01:55:38

标签: html xpath

...
    <ul>
       <li>A
           <ul>
              <li>B
              </li>
           </ul>
       </li>
       <li>C
       </li>
    </ul>
...

XPath表达式仅提供外部<li>元素的子<ul>个元素?我不想要值为<li>的孙子B

到目前为止,我有//ul[1]/li,但这也给了我孙子。

2 个答案:

答案 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()]