XSLT Цикл по вложенным элементам с условиями - PullRequest
0 голосов
/ 04 июня 2018

Как я могу выполнить цикл через XML и посмотреть на все дочерние элементы, когда родительский элемент также имеет несколько элементов.

Я пытаюсь использовать, когда это выглядит как

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

Это только дает мне первое дочернее значение от первого родителя.Как я могу просмотреть всех родителей в утверждении когда?

Пример XML:

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

Ответы [ 2 ]

0 голосов
/ 05 июня 2018

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

Это заменит все элементы PARENT с элементом CHILD с атрибутом value меньше 9999.

<xsl:for-each select="ROOT/PARENT[CHILD/@value &lt; 9999]">
   <!-- do something-->
</xsl:for-each>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...