xml - 如何使用 xlst 检查来自另一个文件的数组中是否存在值
问题描述
我在 .txt 中有一个数组,如下所示:
Value1
Value2
Value3...
我有一个 xml 文件,其中包含一些包含这些值的标签,如下所示:
<catalog>
<object>
<id> Value1 </id>
<title> title 1 </title>
<name> name1 </name>
</object>
<object>
<id> Undesired value </id>
<title> title 2 </title>
<name> name2 </name>
</object>
<catalog>
仅当其 ID 存在于我的 .txt 文件的数组中时,我才想导出此 xml 的示例标题。
这可能使用 XSLT 吗?
输出将是这样的:
<output>
<object>
<id> Value1 </id>
<title> title 1 </title>
<name> name 1 </name>
</object>
...
</output>
解决方案
请考虑以下 awk 解决方案作为替代方案(因为我根本想不出任何使用 XSLT 的方法)。
$ cat tst.awk
BEGIN { print "<output>" }
NR==FNR {
values[$0]
next
}
/<object>/ {
f=1
}
f {
i=i $0 ORS
}
/<\/object>/ {
for (value in values)
if(i ~ value){
printf "%s", i
}
i=f=""
}
END { print "</output>"}
将脚本另存为tst.awk
,将您的列表另存为values.txt
,最后将 XML 文件另存为input.xml
,然后像这样运行它:
$ awk -f tst.awk values.txt input.xml
它使用 GNU Awk 5.1.0 进行了测试,但可以在任何 Unix 机器上运行。如果有兴趣,我很乐意添加代码解释。
推荐阅读
- jupyter-notebook - 如何在 Jupyter Markdown 单元格中的字符下方添加波浪号?
- asp.net - CustomValidator 未在服务器端验证上显示错误消息
- windows - 如果应用程序安装到用户可写文件夹,但随后自行删除,我可以提升权限吗?
- r - 为什么即使其他 RMD 文件工作得很好,我也不能编织我的 R Markdown 文档?
- c++ - 是否可以从某个时间点从文件中读取日期?例如。我想阅读文件的第 7 个字母。C++
- neo4j - Neo4j 按查询性能排序不佳
- c++ - 找到数 n 小于 k 的除数的有效方法
- vnc - 如何在没有以太网端口的情况下将 jetson nano 与 vnc 查看器连接
- c++ - 如何修复此错误:未分配被释放的指针
- python - 用于创建掩码的数组的良好初始化方案