0

HTML ドキュメントがあり、特定のテーブル行の href を抽出しようとしています。レンダリングすると、テーブルにはいくつかの列があります。すべての名前はハイパーリンクですが、4 番目の列に空白の値を持つ名前のハイパーリンクを取得しようとしています。これは、4 番目の列に退職日が含まれており、有効な (退職していない) 従業員のみに関心があるためです。

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) には、2 番目の列にある列 4 の日付フィールドがありません。したがって、最初の href を抽出しようとしていますが、2 番目の 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 に答える