【发布时间】:2021-05-08 04:40:12
【问题描述】:
需要帮助来找到一个简单的 shell 函数来获取以下输入: 1.XML文件 2.一种模式
输出将是 XML 文件中从打开标记到结束标记的部分,其中包含此模式(标记名称已知)
示例 XML 文件部分
<dependency>
<artifact>AAA</artifact>
<package>BBB</package>
<version>${versionParam}</version>
</dependency>
要检查的模式是“BBB”
输出应该是上述 XML 文件中的整个部分(即从依赖项打开标记到依赖项结束标记)
注意 - 已知/假设模式需要位于“依赖”标签内
到目前为止,我有一个函数,它将遍历所有 XML 找到所有依赖项标签,然后在每个依赖项中搜索此模式
该功能有效,但效率不够 我正在寻找不会扫描其中的所有 XML 和所有依赖项标签但会更快找到它的东西:-) 我的代码有大量的 XML 和大量的依赖标签——这就是我正在寻找更快的东西的原因
提前致谢
【问题讨论】:
-
查询 XML 的最佳语言是 XQuery。我不确定它是否适用于您的环境。
-
如果您正在寻找所有具有
package值的dependency元素(例如BBB),您还不清楚您希望代码如何避免读取整个XML 文档。如果您只对第一场比赛感兴趣,那么 XSLT 3 与流媒体和例如xsl:iterate和xsl:break可以在找到第一个匹配项后停止 Saxon EE 中的处理。另一种选择是使用 XML 数据库,一旦您插入并索引文件,搜索应该比读取代码更快。