Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
shell来查找给定属性的xml标记_Xml_Shell - Fatal编程技术网

shell来查找给定属性的xml标记

shell来查找给定属性的xml标记,xml,shell,Xml,Shell,需要帮助找到一个简单的shell函数以获得以下输入: 1.XML文件 2.图案 输出将是XML文件的一部分,从打开标记一直到关闭标记,该标记位于该模式的内部(标记名称已知) 范例 XML文件部分 <dependency> <artifact>AAA</artifact> <package>BBB</package> <version>${versionParam}</version> </dependenc

需要帮助找到一个简单的shell函数以获得以下输入: 1.XML文件 2.图案

输出将是XML文件的一部分,从打开标记一直到关闭标记,该标记位于该模式的内部(标记名称已知)

范例 XML文件部分

<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()