Обход JavaScript на основе точного порядка? - PullRequest
0 голосов
/ 18 июня 2019

Я хотел бы получить некоторую информацию в документах разных форматов.

У меня есть следующий документ:

var getSORMARC = document.evaluate("//*[@id='marcview']/tbody/tr[contains(., '245')]/following-sibling::tr[contains(.,'_c')]/td[contains(.,'_c')]/following-sibling::td[1]", document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null);
if (getSORMARC.singleNodeValue !== null) {
  var SORMARC = getSORMARC.singleNodeValue.innerText;
}
console.log(SORMARC);
<table id="marcview">
  <tbody>
    <tr>
      <td>
        <b>Title</b>
      </td>
      <td>245</td>
      <td>&nbsp;</td>
      <td>0</td>
      <td>_a</td>
      <td>Title of the document /</td>
    </tr>
    <tr>
      <td>_c</td>
      <td>Author no. 1</td>
    </tr>
  </tbody>
</table>

и этот другой документ:

var getSORMARC = document.evaluate("//*[@id='marcview']/tbody/tr[contains(., '245')]/following-sibling::tr[contains(.,'_c')]/td[contains(.,'_c')]/following-sibling::td[1]", document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null);
if (getSORMARC.singleNodeValue !== null) {
  var SORMARC = getSORMARC.singleNodeValue.innerText;
}
console.log(SORMARC);
<table id="marcview">
  <tbody>
    <tr>
      <td>
        <b>Title</b>
      </td>
      <td>245</td>
      <td>&nbsp;</td>
      <td>0</td>
      <td>_a</td>
      <td>Title of another document/</td>
    </tr>
    <tr>
      <td>
        <b>Publication</b>
      </td>
      <td>260</td>
      <td>&nbsp;</td>
      <td>&nbsp;</td>
      <td>_c</td>
      <td>1995</td>
    </tr>
  </tbody>
</table>

Как видите, я использовал этот селектор XPath для обоих этих документов:

//*[@id='marcview']/tbody/tr[contains(., '245')]/following-sibling::tr[contains(.,'_c')]/td[contains(.,'_c')]/following-sibling::td[1]

Проблема в том, что если документ нене содержит элемент с текстовым содержимым "_c", который является непосредственно предком (дочерним) родителя с текстовым содержимым "245", он все равно дает мне текст брата _c <td>, содержащего текст"Publication", который не должен иметь место.

Если код javascript запущен, он даст мне следующее: Первый документ: Автор №.1 Второй документ: (Ничего).

Я на самом деле хотел только захватить текстовое содержимое, если у этого _c есть прямой предок <td>245</td> или <td>Title ...</td>.

Я нахожусь в своем уме, как это сделать.Я пытаюсь запустить свой xpath с _c, но я получаю некоторые ошибки.Любая идея о том, как идти о моем случае использования?

Если этого можно добиться, кроме использования document.evaluate(), я в порядке.

...