Есть несколько вариантов сделать это.Один из вариантов - использовать вложенные циклы 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>