首页 > 解决方案 > 从 bash 命令行解析多个命名空间 XML

问题描述

我正在尝试基于旧的 Mozilla 扩展格式解析 RDF 文件以获取版本,以便在 makefile 中使用,因此寻找xmllint或类似的方法。.

<?xml version="1.0" encoding="UTF-8"?>
<RDF xmlns="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:em="http://www.mozilla.org/2004/em-rdf#">
<Description about="urn:mozilla:install-manifest"
    em:id="some ID" em:version="1.0"
    em:name="somename"
    em:description="description"
    em:creator="author"
    em:iconURL="chrome://extension/skin/icon.png"
    em:unpack="false" em:type="2" />
<em:targetApplication name="Pale Moon">
    <Description
        em:id="{8de7fcbb-c55c-4fbe-bfc5-fc555c87dbc4}" 
        em:minVersion="28.0.0a1"
        em:maxVersion="29.*" />
</em:targetApplication>
</RDF>

如何提取 em: 嵌套在描述标签中的元素(主要是 id 和版本)?或者我不应该完全使用它并使用正则表达式 - 但在命令行上又如何?我在这里找到了对 xmllint 和 xmlstarlet 的引用,但无法弄清楚。

编辑,使用 xmlstarlet 尝试了以下命令行,但它没有输出任何内容。

xmlstarlet sel -N r=http://www.w3.org/1999/02/22-rdf-syntax-ns# -N em=http://www.mozilla.org/2004/em-rdf# -t -m "/r:RDF/r:Description/@em:version"  install.rdf

标签: xmlbashxml-parsing

解决方案


推荐阅读