2

次のようなかなり平らなテーブルがあります

<tr>
<td class="tableResultsA" nowrap>1</td>
<td class="tableResultsA" nowrap><A HREF="docs/123456" target="_blank">Title</A></td>
<td class="tableResultsA" nowrap>SNIPPET</td>
<td class="tableResultsA" nowrap>Date</td>
<td class="tableResultsA" nowrap>Category</td>
</tr>

<tr>
<td class="tableResultsB" nowrap>1</td>
<td class="tableResultsB" nowrap><A HREF="docs/678901" target="_blank">Title</A></td>
<td class="tableResultsB" nowrap>SNIPPET</td>
<td class="tableResultsB" nowrap>Date</td>
<td class="tableResultsB" nowrap>Category</td>
</tr>

このデータから、URL、タイトル、およびスニペットで構成されるドキュメントを作成する必要があります。

ルート結果ノードを次のように設定しました。

<scope>
<xsl:value-of select>"//td[@class='tableResultsA'][2] | //td[@class='tableResultsB'][2]"
</scope>

私のドキュメントには、次のものがあります。

<xsl:template match="//td">
   <document url="{a/@href}">
     <content name="title">
        <xsl:value-of select="a" />
     </content>
     <content name="snippet">
        <xsl:value-of select="//td[@class='tableResultsA'][3] | //td[@class='tableResultsB'][3]" />
     </content>
    </document>
  </xsl:template>

問題はスニペットです。スニペット出力でまったく同じ結果が得られるため、データをトラバースしていません。私は XPath の専門家ではありません。次または次の兄弟が機能するかどうか疑問に思っていますが、それらの良い例をどこにも見つけることができませんでした。

どんな助けでも大歓迎です。

4

1 に答える 1

0

この変換:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>
 <xsl:strip-space elements="*"/>

 <xsl:template match="tr">
  <document url="{td/A/@HREF}">
     <content name="title">
        <xsl:value-of select="td/A"/>
     </content>
     <content name="snippet">
        <xsl:value-of select="td[3]"/>
     </content>
  </document>
 </xsl:template>
</xsl:stylesheet>

修正された (整形式の XML ドキュメントになる) 提供された入力に適用すると、次のようになります。

<table>
    <tr>
        <td class="tableResultsA" nowrap="nowrap">1</td>
        <td class="tableResultsA" nowrap="nowrap">
            <A HREF="docs/123456" target="_blank">Title</A>
        </td>
        <td class="tableResultsA" nowrap="nowrap">SNIPPET</td>
        <td class="tableResultsA" nowrap="nowrap">Date</td>
        <td class="tableResultsA" nowrap="nowrap">Category</td>
    </tr>
    <tr>
        <td class="tableResultsB" nowrap="nowrap">1</td>
        <td class="tableResultsB" nowrap="nowrap">
            <A HREF="docs/678901" target="_blank">Title</A>
        </td>
        <td class="tableResultsB" nowrap="nowrap">SNIPPET</td>
        <td class="tableResultsB" nowrap="nowrap">Date</td>
        <td class="tableResultsB" nowrap="nowrap">Category</td>
    </tr>
</table>

必要な正しい結果が生成されます。

<document url="docs/123456">
   <content name="title">Title</content>
   <content name="snippet">SNIPPET</content>
</document>
<document url="docs/678901">
   <content name="title">Title</content>
   <content name="snippet">SNIPPET</content>
</document>
于 2013-01-24T05:01:52.640 に答える