shell来查找给定属性的xml标记
需要帮助找到一个简单的shell函数以获得以下输入: 1.XML文件 2.图案 输出将是XML文件的一部分,从打开标记一直到关闭标记,该标记位于该模式的内部(标记名称已知) 范例 XML文件部分shell来查找给定属性的xml标记,xml,shell,Xml,Shell,需要帮助找到一个简单的shell函数以获得以下输入: 1.XML文件 2.图案 输出将是XML文件的一部分,从打开标记一直到关闭标记,该标记位于该模式的内部(标记名称已知) 范例 XML文件部分 <dependency> <artifact>AAA</artifact> <package>BBB</package> <version>${versionParam}</version> </dependenc
<dependency>
<artifact>AAA</artifact>
<package>BBB</package>
<version>${versionParam}</version>
</dependency>
AAA
BBB
${versionParam}
要检查的模式为“BBB”
输出应该是XML文件中上面的整个部分(即从依赖项打开标记到依赖项关闭标记)
注意-已知/假设模式需要位于“dependency”标记内
到目前为止,我有一个函数,它将遍历所有XML,找到所有依赖项标记,然后在每个依赖项中搜索此模式
该功能可以工作,但效率不够
我正在寻找一种不会扫描所有XML和其中的所有依赖项标记,但会更快地找到它的东西:-)
我的代码有大量的XML和大量的依赖项标记——这就是我寻找更快的东西的原因
提前感谢正如一篇评论中提到的,XQuery是在shell脚本中从XML文件中查找和提取数据的方法 使用
xmllint
,一个常用的命令行实用程序,用于处理XML:
xmllint--xpath'//dependency[contains(,“BBB”)]'input.xml
或者xmlstarlet
,另一个有用的XML工具:
xmlstarlet sel-t-c'//依赖项[contains(,“BBB”)]'input.xml
查询XML的最佳语言是XQuery。我不确定它是否适用于您的环境。如果您正在查找具有该包
值的所有依赖项
元素(例如BBB
),则不清楚您希望代码如何避免阅读整个XML文档。如果您只对第一个匹配感兴趣,那么使用流式处理的XSLT 3,例如xsl:iterate
和xsl:break
可以在找到第一个匹配后在Saxon EE中停止处理。另一种选择是使用XML数据库,一旦插入并索引了文件,搜索应该比代码读取更快。非常感谢!不熟悉这些实用程序-太棒了!或者使用xidel
:xidel-s input.xml-e'//dependency[contains(,“BBB”)]--printed node format=xml
,xidel-s input.xml-e'//dependency[contains(,“BBB”)]/outer-xml()
。