0

我有一个 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。换句话说,“给我第&nbsp;4 列中每个表格行的第一个 href。”

FirePath 中的这给了我表中的所有href: //table[@id="searchResults"]//@href

谢谢

4

1 回答 1

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
于 2015-02-10T21:15:07.430 回答