0

我想掌握不同格式文档中的一些信息。

我有以下文件:

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 启动我的 xpath,_c但我遇到了一些错误。关于如何处理我的用例的任何想法?

如果除了 using 之外还可以实现document.evaluate(),我可以接受。

4

0 回答 0