HTML上的Xpath,找到条件匹配

时间:2015-02-10 20:28:53

标签: html xpath firepath

我有一个HTML文档,我正在尝试为某些表行提取href。渲染后,该表有几列。每个名称都是一个超链接,但我试图捕获第四列中具有空值的名称的超链接。这是因为第四列包含终止日期,我只对活跃(非终止)员工感兴趣。

以下是HTML响应的一个子集:

<tr id="r6" >                                    
<td>
   <a href="benefits.asp?SK=177646822&STYPE=ELNAME&QRY=a">111-11-1111</a>
</td>
<td >
   <a href="benefits.asp?SK=177646822&STYPE=ELNAME&QRY=a">Lastname</a>
</td>
<td nowrap="nowrap" >
   <a href="benefits.asp?SK=177646822&STYPE=ELNAME&QRY=a">Firstname</a>
</td>
<td nowrap="nowrap" >
   &nbsp;
</td>
<td>
   <a href="benefits.asp?SK=177646822&STYPE=ELNAME&QRY=a">743</a>
</td>
</tr>

<tr id="r7" >                                    
<td>
   <a href="benefits.asp?SK=177646782&STYPE=ELNAME&QRY=a">222-22-2222</a>
</td>
<td >
   <a href="benefits.asp?SK=177646782&STYPE=ELNAME&QRY=a">Ignore</a>
</td>
<td nowrap="nowrap" >
   <a href="benefits.asp?SK=177646782&STYPE=ELNAME&QRY=a">This</a>
</td>
<td nowrap="nowrap" >
   <a href="benefits.asp?SK=177646782&STYPE=ELNAME&QRY=a">7/12/2010</a>
</td>
<td>
   <a href="benefits.asp?SK=177646782&STYPE=ELNAME&QRY=a">1070</a>
</td>
</tr>

上面的第一个表格行(id = r6)缺少第4列中的日期字段,该字段存在于第二个字段中。所以我试图提取第一个而不是第二个的href。换句话说,“给我第4列中&nbsp;的每个表行的第一个href。”

FirePath中的这个给了我表中的所有href: //表[@ ID = “SearchResult所”] // @ HREF

由于

1 个答案:

答案 0 :(得分:0)

答案取决于您使用XPath的环境。具体来说,它取决于如何编码非中断空格。例如,在XSLT中,表达式看起来像

//tr[contains(td[4],'&#160;')]/td[1]/a/@href

输入(略有修改)

<?xml version="1.0"?>
<!DOCTYPE root [
    <!ENTITY nbsp "&#160;">
]>
<root>
<tr id="r6" >                                    
<td>
   <a href="YES">111-11-1111</a>
</td>
<td >
   <a href="benefits.asp?SK=177646822STYPE=ELNAMEQRY=a">Lastname</a>
</td>
<td nowrap="nowrap" >
   <a href="benefits.asp?SK=177646822STYPE=ELNAMEQRY=a">Firstname</a>
</td>
<td nowrap="nowrap" >
   &nbsp;
</td>
<td>
   <a href="benefits.asp?SK=177646822STYPE=ELNAMEQRY=a">743</a>
</td>
</tr>

<tr id="r7" >                                    
<td>
   <a href="benefits.asp?SK=177646782STYPE=ELNAMEQRY=a">222-22-2222</a>
</td>
<td >
   <a href="benefits.asp?SK=177646782STYPE=ELNAMEQRY=a">Ignore</a>
</td>
<td nowrap="nowrap" >
   <a href="benefits.asp?SK=177646782STYPE=ELNAMEQRY=a">This</a>
</td>
<td nowrap="nowrap" >
   <a href="benefits.asp?SK=177646782STYPE=ELNAMEQRY=a">7/12/2010</a>
</td>
<td>
   <a href="benefits.asp?SK=177646782STYPE=ELNAMEQRY=a">1070</a>
</td>
</tr>
</root>

<强>样式表

<?xml version="1.0" encoding="UTF-8" ?>
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
    <xsl:output method="text" omit-xml-declaration="yes" encoding="UTF-8" indent="yes" />

    <xsl:template match="/">
          <xsl:value-of select="//tr[contains(td[4],'&#160;')]/td[1]/a/@href"/>
    </xsl:template>

</xsl:transform>

<强>输出

YES