2015-02-09 39 views
1

我曾经有这种形式;xpath如何获取文本时,哥哥不是一个元素

<li> 
    <span>name:</span> 
    <p>Seca </p> 
</li> 

,我就是用这个XPath来获得seca

ul/li/span[normalize-space(text())='name:']/following-sibling::p[1]/text()) 

和一切工作良好。我们没有p这个标签。所以我只有这个:

<li> 
    <span>name:</span> 
    Seca 
</li> 

我应该做的编辑我的代码,以获得seca现在好吗?

回答

1

现在,“Seca”只是li元素的另一个孩子 - 因此是span元素的后续兄弟。使用

//ul/li/span[normalize-space(text())='name:']/following-sibling::text() 

给你

[EMPTY LINE] 
Seca 
[EMPTY LINE] 

你可能要排除那些只有空白线:

normalize-space(//ul/li/span[normalize-space(text())='name:']/following-sibling::text()) 

,其结果将是

Seca 

如果您的实际输入包含更多文本节点,请不要忘记在表达式中添加[1]


注意,表达可能是一个容易得多,如果确实没有理由正常化的span文本内容,并只考虑其直接子文本节点:

//ul/li[span='name:']/text()[2]