【问题标题】:xslt select matching value from nested loopxslt 从嵌套循环中选择匹配值
【发布时间】:2021-04-04 22:33:16
【问题描述】:

我需要关于这个简单的 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>

【问题讨论】:

  • 为什么&lt;set_ctrl_nbr&gt;0002&lt;/set_ctrl_nbr&gt; 从您的输出中排除?
  • 由于 Transetconnum>0002 与 set_ctrl_nbr 不匹配,因此排除了 0002。
  • 很抱歉输入与预期输出早先是错误的,我已对其进行了编辑。希望这很简单。

标签: xml loops xslt foreach nested


【解决方案1】:

这里不需要任何循环(当然也不是“嵌套循环”)。只需复制与“允许”值匹配的节点:

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

如果要比较的两个对象都是节点集,那么比较将 当且仅当在第一个节点集中有一个节点并且一个 第二个节点集中的节点,使得执行的结果 比较两个节点的字符串值是真的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-10
    相关资源
    最近更新 更多