首页 > 解决方案 > 如何使用 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>

标签: xmlxslt

解决方案


请考虑以下 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 机器上运行。如果有兴趣,我很乐意添加代码解释。


推荐阅读