使用 xmllint 获取特定元素

Get a specific element with xmllint

考虑文件 example.html

中的以下 HTML 代码
<!DOCTYPE html>
<head>
 <meta charset="utf-8">

<body>
 <div class="container">
  <h1>
   <a href="/">
    <img src="/images/image.png"/>
   </a>
  </h1>
   <ul>
    <li><a href="/" >link1<br /><span>content</span></a></li>
    <li><a href="/folder" >link2<br /><span>more contend</span></a></li>
   </ul>
 </div><!-- .container -->
 <div class="container">
  <ul class="disc">
   <li><strong>no interest 1</strong></li>
   <li><strong>no interest 2</strong></li>
   <li><strong>no interest 3</strong></li>
   <li>keyword1: <strong>unkown_content</strong></li>
   <li>keyword2: <strong>unkown_content</strong></li>
  </ul>
 </div><!-- .container -->
 <div class="container">
  <ul class="disc">
   <li><a href="/folder1">not interested</a></li>
   <li><a href="/folder2">not interested</a></li>
   <li><a href="/folder3">not interested</a></li>
   <li>keyword1: <strong>unkown_content</strong></li>
   <li>keyword2: <strong>unkown_content</strong></li>
  </ul>
 </div><!-- .container -->
</body>
</html>

我想在第二个 keyword1 之后得到 unkown_content。我有 尝试过

xmllint --html --xpath "//li[text()='keyword1: ']" example.html 2>/dev/null
<li>keyword1: <strong>unkown_content</strong></li><li>keyword1: <strong>unkown_content</strong></li>

如您所见,returns 两个节点都具有 keyword1。如何获取最后一次出现的内容?

尝试xmllint --html --xpath "(//li[text()='keyword1: '])[last()]" example.html 2>/dev/null

注意添加的 [last()] - 它指向最后一次出现的 //li[text()='keyword1: ']//li[text()='keyword1: '] 周围的大括号也是必需的,因为 [last()] 应用于节点集。