当父级还有多个元素时,如何循环使用XML并查看所有子元素。
我正在尝试使用看起来像
的时候<xsl:when test="ROOT/PARENT[CHILD/@value] <= 9999">
这只是给了我第一个父母的第一个子值。如何在when语句中循环遍历所有父项?
XML示例:
<ROOT>
<PARENT>
<CHILD value="1">
</CHILD>
</PARENT>
<PARENT>
<CHILD value="2">
</CHILD>
</PARENT>
<PARENT>
<CHILD value="3">
</CHILD>
</PARENT>
</ROOT>
答案 0 :(得分:2)
有几种选择可以做到。一种选择是使用嵌套的for-each
循环来迭代<PARENT>
和<CHILD>
。
<xsl:template match="ROOT">
<xsl:for-each select="PARENT">
<PARENT>
<xsl:for-each select="CHILD[@value < 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 < 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 < 9999]">
<!-- do something-->
</xsl:for-each>