Руби Нокогири - XPATH с использованием URL - PullRequest
1 голос
/ 28 февраля 2012

У меня есть эта таблица:

 <tr>
      <td><b>Amount</b></td>
      <td><b>Due Date</b></td>
      <td"><b>Link</b></td>
  </tr>

<tr>
  <td>02/13/2012</td>
  <td>$81.66</td>
  <td><a onclick="javascript:window.open('/cso/displaypdfbill?selectedBillkey=449409587','_blank');" href="javascript: void(0);">View Bill</a></td>

</tr>
<tr>
  <td>01/13/2012</td>
  <td>$181.66</td>
  <td><a onclick="javascript:window.open('/cso/displaypdfbill?selectedBillkey=543409587','_blank');" href="javascript: void(0);">View Bill</a></td>

</tr>

Я перебираю таблицу и извлекаю клавишу Bill в каждой строке. Я удалил Billkey и сохранил его в переменной.

BillKey = 449409587

Я хочу получить <tr>, где находится BillKey:

Так что я должен иметь:

2/13/2012      81.86     View Bill

У меня проблемы с написанием XPATH для получения <tr>.

1 Ответ

0 голосов
/ 28 февраля 2012
* +1000 * Используйте
   string(table/tr
            [td/a/@onclick
                  [substring
                    (.,
                     string-length()
                   - 21
                    )
                  =
                   $vEnding
                  ]
            ]
         )

где $ vEnding должен быть заменен строкой : "=449409587','_blank');"

Итак, полное выражение XPath после этой подстановки:

   string(table/tr
            [td/a/@onclick
                  [substring
                    (.,
                     string-length()
                   - 21
                    )
                  =
                   "=449409587','_blank');"
                  ]
            ]
         )

XSLT - проверка на основе :

Это XSLT-преобразование :

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

 <xsl:variable name="vEnding">=449409587','_blank');</xsl:variable>

 <xsl:template match="/">
  <xsl:copy-of select=
  "string(table/tr
            [td/a/@onclick
                  [substring
                    (.,
                     string-length()
                   - 21
                    )
                  =
                   $vEnding
                  ]
            ]
         )
  "/>
 </xsl:template>
</xsl:stylesheet>

при применении к следующему XML-документу (входящий в комплект один верхний элемент table):

<table>
    <tr>
        <td>
            <b>Amount</b>
        </td>
        <td>
            <b>Due Date</b>
        </td>
        <td>
            <b>Link</b>
        </td>
    </tr>
    <tr>
        <td>02/13/2012</td>
        <td>$81.66</td>
        <td>
            <a onclick=
            "javascript:window.open('/cso/displaypdfbill?selectedBillkey=449409587','_blank');" href="javascript: void(0);">View Bill</a>
        </td>
    </tr>
    <tr>
        <td>01/13/2012</td>
        <td>$181.66</td>
        <td>
            <a onclick=
            "javascript:window.open('/cso/displaypdfbill?selectedBillkey=543409587','_blank');" href="javascript: void(0);">View Bill</a>
        </td>
    </tr>
</table>

оценивает выражение XPath и копирует на выход результат оценки :

    02/13/2012
    $81.66

        View Bill
...