如何解决xslt 从嵌套循环中选择匹配值
我需要有关此简单 xslt 循环的帮助。 需要为匹配选择所有匹配的 DocInstance 循环 (Transetconnum2/Transetconnum = DocInstance/set_ctrl_nbr) 低于 XML。
<Documents>
<Transetconnum2>
<Transetconnum>0001</Transetconnum>
<Transetconnum>0003</Transetconnum>
</Transetconnum2>
<DocInstance>
<doc_ref_id>9178191-RBTW</doc_ref_id>
<set_ctrl_nbr>0001</set_ctrl_nbr>
<grp_ctrl_nbr>206875</grp_ctrl_nbr>
<int_ctrl_nbr>682651</int_ctrl_nbr>
</DocInstance>
<DocInstance>
<doc_ref_id>9178192-RBTW</doc_ref_id>
<set_ctrl_nbr>0002</set_ctrl_nbr>
<grp_ctrl_nbr>206875</grp_ctrl_nbr>
<int_ctrl_nbr>682651</int_ctrl_nbr>
</DocInstance>
<DocInstance>
<doc_ref_id>9178193-RBTW</doc_ref_id>
<set_ctrl_nbr>0003</set_ctrl_nbr>
<grp_ctrl_nbr>206875</grp_ctrl_nbr>
<int_ctrl_nbr>682651</int_ctrl_nbr>
</DocInstance>
</Documents>
预期输出:
<Documents>
<DocInstance>
<doc_ref_id>9178191-RBTW</doc_ref_id>
<set_ctrl_nbr>0001</set_ctrl_nbr>
<grp_ctrl_nbr>206875</grp_ctrl_nbr>
<int_ctrl_nbr>682651</int_ctrl_nbr>
</DocInstance>
<DocInstance>
<doc_ref_id>9178193-RBTW</doc_ref_id>
<set_ctrl_nbr>0003</set_ctrl_nbr>
<grp_ctrl_nbr>206875</grp_ctrl_nbr>
<int_ctrl_nbr>682651</int_ctrl_nbr>
</DocInstance>
</Documents>
解决方法
这里不需要任何循环(当然也不是“嵌套循环”)。只需复制与“允许”值匹配的节点:
XSLT 1.0
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:template match="/Documents">
<xsl:copy>
<xsl:copy-of select="DocInstance[set_ctrl_nbr = ../Transetconnum2/Transetconnum]"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
有关解释,请阅读 XPath 规范中定义的 comparison rules:
如果要比较的两个对象都是节点集,那么比较将 当且仅当第一个节点集中有一个节点并且一个 第二个节点集中的节点,这样执行的结果 两个节点的字符串值比较为真。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。