gpt4 book ai didi

xml - 使用 XSLT 1 根据另一个 xml 过滤 XML

转载 作者:行者123 更新时间:2023-12-04 07:11:03 27 4
gpt4 key购买 nike

我们如何根据另一个 xml 文档过滤一个 xml 文档。我必须删除查找 xml 中不存在的所有元素。输入 xml 和查找 xml 都具有相同的根元素,我们使用的是 XSLT 1.0。

防爆输入

<Root>
<E1 a="1">V1</E1>
<E2>V2</E2>
<E3>V3</E3>
<E5>
<SE51>SEV1</SE51>
<SE52>SEV2</SE52>
</E5>
<E6>
<SE61>SEV3</SE61>
<SE62>SEV4</SE62>
</E6>
</Root>

过滤 XML
<Root>
<E1 a="1"></E1>
<E2></E2>
<E5>
<SE51></SE51>
<SE52></SE52>
</E5>
</Root>

预期产出
<Root>
<E1 a="1">V1</E1>
<E2>V2</E2>
<E5>
<SE51>SEv1</SE51>
<SE52>SEV2</SE52>
</E5>
</Root>

最佳答案

这是所需的转换:

xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:z="内联:text.xml"
排除结果前缀=“z”
>




<根>









"文档('')/*/z:filter"/>



















select="$pFiltNode/*[name()=name(current())]"/>











当此转换应用于以下 XML 文档时(原始文档加上 <SE511>SEV11</SE511> 的添加表明过滤适用于任何级别 :

<根>
V1
V2
V3

SEV1
SEV11
SEV2


SEV3
SEV4



产生了想要的结果 :

<根>
V1
V2
V3

SEV1
SEV11
SEV2


SEV3
SEV4



请注意以下细节此解决方案的:

  • 模板仅应用于在过滤器文档中具有匹配节点的元素以及此类元素的所有文本节点。
  • 匹配元素的模板作为参数传递给过滤器文档中的相应节点。
  • 将模板应用于元素子元素时,会找到其对应的节点并将其作为预期参数传递。

  • 尽情享受吧!

    关于xml - 使用 XSLT 1 根据另一个 xml 过滤 XML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/336572/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com