xmllint 没有返回我所期望的——n00b 警告

xmllint not returning what I expect -- n00b warning

问题> 我从存储在 get_build_info.xml 中的 API 调用返回了一些 xml。我正在尝试从 xml、build_id 中获取一个属性。这是 xml:

 <?xml version="1.0" encoding="UTF-8"?>

<buildinfo xmlns:xsi="http&#x3a;&#x2f;&#x2f;www.w3.org&#x2f;2001&#x2f;XMLSchema-instance" xmlns="https&#x3a;&#x2f;&#x2f;analysiscenter.veracode.com&#x2f;schema&#x2f;4.0&#x2f;buildinfo" xsi:schemaLocation="https&#x3a;&#x2f;&#x2f;analysiscenter.veracode.com&#x2f;schema&#x2f;4.0&#x2f;buildinfo https&#x3a;&#x2f;&#x2f;analysiscenter.veracode.com&#x2f;resource&#x2f;4.0&#x2f;buildinfo.xsd" buildinfo_version="1.4" account_id="1234" app_id="010101" sandbox_id="020202" build_id="987654321"><build version="4 Sep 2020 Static &#x28;2&#x29;" build_id="987654321" submitter="Someone Else" platform="Not Specified" lifecycle_stage="Not Specified" results_ready="true" policy_name="Some Development App Policy" policy_version="7" policy_compliance_status="Conditional Pass" rules_status="Not Assessed" grace_period_expired="false" scan_overdue="false" legacy_scan_engine="false">
      <analysis_unit analysis_type="Static" published_date="2020-09-04T11&#x3a;44&#x3a;09-04&#x3a;00" published_date_sec="1599234249" status="Results Ready" engine_version="20200821190810"/>
   </build>
</buildinfo>

我试过的方法> 以下及其许多其他变体:

xmllint --xpath 'string(//xml/buildinfo/@build_id)' get_build_info.xml

xmllint --xpath 'string(//buildinfo/@build_id)' get_build_info.xml

xmllint --xpath 'string(/xml/buildinfo/@build_id)' get_build_info.xml

xmllint --xpath '(//xml/buildinfo/build_id/text())' get_build_info.xml

xmllint --xpath '(/xml/buildinfo/build_id/text())' get_build_info.xml

最后两个至少产生某种输出,尽管是“XPath 集为空”。前几个我在 --xpath 中使用那个 'string( +...+ @build_id 的地方,我没有得到任何返回。这些似乎都从 bash 退出 0 所以据我所知,没有语法问题。就像我说的,我是一个 n00b。我查看了 Whosebug 上的其他流行门票,这就是让我走到这一步的原因。我很可能没有在这里考虑一些明显的东西,所以假设我对 bash 一无所知(这接近于真实)。我很高兴得到指示去自己寻找答案。

您正纠结于名称空间,因此请尝试使用 xpath 表达式,例如:

//*[local-name()='buildinfo']/@build_id

看看它是否有效。