如何使用Shell脚本获取html文件中的特定值

问题描述

我有一个基于测试套件执行情况生成的html文件。它包含测试运行详细信息,例如在特定运行中通过和失败了多少个测试用例。我对Shell脚本非常陌生,不确定如何从詹金斯$ Workspace中生成的.html中提取值

HTML片段:(仅复制特定标签,而不是复制整个.html文件):

<ul class="quick-summary--list---2_80W">
    <li class="quick-summary--item---bfSQ0 quick-summary--passes---3IjYH" title="Passed">
       <button type="button">
           <i class="material-icons quick-summary--icon---TW1oG quick-summary--circle-icon---1HDS7"></i>
             9
      </button>
    </li>
   <li class="quick-summary--item---bfSQ0 quick-summary--failures---14s29" title="Failed">
       <button type="button">
          <i class="material-icons quick-summary--icon---TW1oG quick-summary--circle-icon---1HDS7"></i>
              0
       </button>    
    </li>
</ul>

在上面的示例.html文件中,我正在下面的xpath中查找数字:

.//*[@title='Passed']/button  // It should return 9 

.//*[@title='Failed']/button  // It should return 0

如何从在上述特定XPATH中生成值的html文件获取这些数字。

请帮助我实现这一目标。

已更新:

在1以下尝试,但返回空:

$ xmllint --html  --xpath "//*[@title='Passed']/button" result.html
XPath set is empty

解决方法

该问题似乎是由于html代码段的<i>节点中的字符异常(不确定该是什么)引起的。

绕开角色的一种令人费解的方法是:

xmllint --html  --xpath "substring-after(normalize-space(//li[@title='Passed']/button),' ')"   result.html

xmllint --html  --xpath "substring-after(normalize-space(//li[@title='Failed']/button),' ')"   result.html

输出确实是90