xml-parsing - 没有xpath的xmllint提取值
问题描述
我需要验证我的 xml 中一个元素的 xml textvalue,如下所示,到目前为止,我得到了所有 dmdindex:field 的值,但我只需要最后一个drep.rightsFacet结果输出。请记住,我拥有的 xmllint 版本没有 xpath,因此我必须求助于 xmllint --shell。任何帮助表示赞赏。
这是xml文件片段:
<?xml version="1.0" encoding="UTF-8"?>
<dmdindex:dmdindex xmlns:dmdindex="http://www.example.com/example/dmdindex/"
xmlns:functx="http://www.functx.com"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<dmdindex:record>
<dmdindex:field name="drep.yearStart">1881</dmdindex:field>
<dmdindex:field name="drep.pubConcat">[Detroit : Parke, Davis & Co., 1881?]</dmdindex:field>
<dmdindex:field name="drep.rights">blahblahblah</dmdindex:field>
<dmdindex:field name="drep.rightsLink">https://creativecommons.org/publicdomain/mark/1.0/</dmdindex:field>
<dmdindex:field name="drep.rightsFacet">Public domain</dmdindex:field>
</dmdindex:record>
</dmdindex:dmdindex>
这是我使用的命令
echo "cat //*[local-name()='dmdindex']/*[local-name()='record']/*[local-name()='field']" | xmllint --shell example.xml | sed '/^\/ >/d' | sed 's/<[^>]*.//g'
返回
-------
Philadelphia : Sunshine Press, [1897]
-------
blahblahblah
-------
https://creativecommons.org/publicdomain/mark/1.0/
-------
Public domain
我只需要抓住“公共领域”的价值而忽略其余的。谢谢!
解决方案
您可以将谓词添加到您的 xpath 以测试name
属性的值...
echo "cat //*[local-name()='dmdindex']/*[local-name()='record']/*[local-name()='field'][@name='drep.rightsFacet']/text()" | xmllint --shell example.xml | sed '/^\/ >/d'
推荐阅读
- python - 具有极高计算步骤的气流过程
- python - 猴子补丁向现有模块添加新类和功能
- c++ - 无法访问存储在 C++ 中的 .dat 文件中的矢量数据
- r - 如果 2 列数据在其上方的行中具有相同的值,则向其添加 0.00001
- kubernetes - 在 <.Values.keyDB.fullnameOverride> 处执行“keydb.fullname”:无法评估 int 类型的字段值
- redux - 有没有办法仅在调用函数时获取 react-redux 存储值?
- python - Python Dictionary:我想将多个列表组合成一个字典
- arduino - 通过 node-red 与 Arduino 的串行通信以“错误”格式发送
- php - 有条件地将项目添加到类
- android - 在 recyclerview 中提交列表后强制编辑文本以移除焦点