下面的div在我正在解析的HTML中以该顺序出现。
//div[contains(@class,'top-container')]//font/text()
我正在使用上面的xpath表达式尝试获取下面第一个div中的任何数据,其中使用连字符来分隔数据:
Wednesday - Chess at Higgins Stadium
Thursday - Cook-off
问题是我从下面的第二个div获取数据,例如:
Monday 10:00 - 11:00
Tuesday 10:00 - 11:00
如何仅从第一个div中检索数据? (我还想排除第一个div中不包含这个带连字符的数据的任何元素)?
<div class="top-container">
<div dir="ltr">
<div dir="ltr"><font face="Arial" color="#000000" size="2">Wednesday - Chess at Higgins Stadium</font></div>
<div dir="ltr"><font face="Arial" size="2">Thursday - Cook-off</font></div>
<div dir="ltr"><font face="Arial" size="2"></font> </div>
<div dir="ltr"> </div>
<div dir="ltr"><font face="Arial" color="#000000" size="2"></font> </div>
</div>
<div dir="ltr">
<div RE><font face="Arial">
<div dir="ltr">
<div RE><font face="Arial" size="2"><strong>Alex Dawkin </strong></font></div>
<div RE><font face="Arial" size="2">Monday 10:00 - 11:00 </font></div>
<div RE><font size="2">Tuesday 10:00 - 11:00 </font></div>
<div RE>
<div RE><font face="Arial" size="2"></font></div><font face="Arial" size="2"></font></div>
<div RE> </div>
<div RE> </div>
答案 0 :(得分:1)
您的XPATH与 任何 font
元素匹配,后者是<div class="top-container">
的后代。
div[1]
将解决“top-container”元素的第一个div
子元素。如果将其添加到XPATH,它将返回所需的结果。
//div[contains(concat(' ',@class,' '),' top-container '))]/div[1]//font/text()
如果您想确保只解决包含“ - ”的text()
个节点,那么您还应该为text()
添加谓词过滤器。
//div[contains(concat(' ',@class,' '),' top-container '))]/div[1]//font/text()[contains(.,'-')]
而不是只检查节点 包含“ - ”,你会如何修改 要检查的最后一个表达式 非空字符串?
如果要返回任何带有值的text()
节点,则不需要text()
上的谓词过滤器。如果文本节点没有内容,则它不是文本节点,也不会被选中。
但是,如果您只想选择包含空白以外的文字的text()
个节点,则可以使用以下表达式:
//div[contains(concat(' ',@class,' '),' top-container '))]/div[1]//font/text()[normalize-space()]
normalize-space()
删除任何前导和尾随空白字符。因此,如果text()
仅包含空格(包括
),则结果将无效,并在谓词过滤器中评估为false()
,因此只有text()
包含其他内容将选择空格。