Хобрук: Ваш путь к мастерству в программировании

Ruby Nokogiri — XPATH с использованием URL

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

 <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>.

28.02.2012

Ответы:


1

Использование:

   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
28.02.2012
  • Я не могу заставить это работать. у вас есть $vEnding = = 449409587','_blank', но у меня просто $vEnding = 449409587. Есть ли способ просто сделать это, когда onclick содержит 449409587? 28.02.2012
  • @ user1198316: Да, в XPath 1.0 мы реализуем функцию ends-with($s, $p) только для XPath 2.0 с substring($s, string-length() - string-length($p) +1) = string-length($p) . Итак, в любом случае вы должны получить string-length() идентифицирующей конечной строки и поместить ее в свое выражение. 28.02.2012
  • @ user1198316: Оценка выражения XPath в моем ответе на предоставленный XML-документ (как и в моем ответе) дает отчетные результаты. Я всегда тестирую код и фактически копирую/вставляю результаты выполнения этого кода. 28.02.2012
  • Новые материалы

    Создание кнопочного меню с использованием HTML, CSS и JavaScript
    Вы будете создавать кнопочное меню, которое имеет состояние наведения, а также позволяет вам выбирать кнопку при нажатии на нее. Финальный проект можно увидеть в этом Codepen . Шаг 1..

    Внедрите OAuth в свои веб-приложения для повышения безопасности
    OAuth — это широко распространенный стандарт авторизации, который позволяет приложениям получать доступ к ресурсам от имени пользователя, не раскрывая его пароль. Это позволяет пользователям..

    Классы в JavaScript
    class является образцом java Script Object. Конструкция «class» позволяет определять классы на основе прототипов с чистым, красивым синтаксисом. // define class Human class Human {..

    Как свинг-трейдеры могут использовать ИИ для больших выигрышей
    По мере того как все больше и больше профессиональных трейдеров и активных розничных трейдеров узнают о возможностях, которые предоставляет искусственный интеллект и машинное обучение для улучшения..

    Как построить любой стол
    Я разработчик программного обеспечения. Я люблю делать вещи и всегда любил. Для меня программирование всегда было способом создавать вещи, используя только компьютер и мое воображение...

    Обзор: Машинное обучение: классификация
    Только что закончил третий курс курса 4 часть специализации по машинному обучению . Как и второй курс, он был посвящен низкоуровневой работе алгоритмов машинного обучения. Что касается..

    Разработка расширений Qlik Sense с qExt
    Использование современных инструментов веб-разработки для разработки крутых расширений Вы когда-нибудь хотели кнопку для установки переменной в приложении Qlik Sense? Когда-нибудь просили..