XSLT通过具有条件的嵌套元素循环

时间:2018-06-04 15:29:00

标签: xml xslt

当父级还有多个元素时,如何循环使用XML并查看所有子元素。

我正在尝试使用看起来像

的时候
<xsl:when test="ROOT/PARENT[CHILD/@value] &lt;= 9999">  

这只是给了我第一个父母的第一个子值。如何在when语句中循环遍历所有父项?

XML示例:

<ROOT>
<PARENT>
    <CHILD value="1">
    </CHILD>
</PARENT>
<PARENT>
    <CHILD value="2">
    </CHILD>
</PARENT>
<PARENT>
    <CHILD value="3">
    </CHILD>
</PARENT>
</ROOT>

2 个答案:

答案 0 :(得分:2)

有几种选择可以做到。一种选择是使用嵌套的for-each循环来迭代<PARENT><CHILD>

<xsl:template match="ROOT">
    <xsl:for-each select="PARENT">
        <PARENT>
            <xsl:for-each select="CHILD[@value &lt; 9999]">
                <CHILD_VALUE><xsl:value-of select="@value" /></CHILD_VALUE>
            </xsl:for-each>
        </PARENT>
    </xsl:for-each>
</xsl:template>

其他选项是匹配<PARENT>模板,并在模板中的for-each上使用<CHILD>循环

<xsl:template match="PARENT">
    <xsl:copy>
        <xsl:for-each select="CHILD[@value &lt; 9999]">
            <CHILD_VALUE><xsl:value-of select="@value" /></CHILD_VALUE>
        </xsl:for-each>
    </xsl:copy>
</xsl:template>

如果我们修改输入XML以在<CHILD>中包含多个<PARENT>元素,如下所示

<ROOT>
    <PARENT>
        <CHILD value="1"></CHILD>
        <CHILD value="11"></CHILD>
        <CHILD value="12"></CHILD>
    </PARENT>
    <PARENT>
        <CHILD value="2"></CHILD>
        <CHILD value="21"></CHILD>
        <CHILD value="22"></CHILD>
    </PARENT>
    <PARENT>
        <CHILD value="3"></CHILD>
        <CHILD value="31"></CHILD>
        <CHILD value="32"></CHILD>
    </PARENT>
</ROOT>

两个XSLT模板,给出以下输出。

<PARENT>
    <CHILD_VALUE>1</CHILD_VALUE>
    <CHILD_VALUE>11</CHILD_VALUE>
    <CHILD_VALUE>12</CHILD_VALUE>
</PARENT>
<PARENT>
    <CHILD_VALUE>2</CHILD_VALUE>
    <CHILD_VALUE>21</CHILD_VALUE>
    <CHILD_VALUE>22</CHILD_VALUE>
</PARENT>
<PARENT>
    <CHILD_VALUE>3</CHILD_VALUE>
    <CHILD_VALUE>31</CHILD_VALUE>
    <CHILD_VALUE>32</CHILD_VALUE>
</PARENT>

答案 1 :(得分:0)

这将循环覆盖所有PARENT元素,其中CHILD元素的属性value小于9999。

<xsl:for-each select="ROOT/PARENT[CHILD/@value &lt; 9999]">
   <!-- do something-->
</xsl:for-each>
相关问题