Как управлять повторяющимися тегами в XML с помощью таблицы стилей XSL - PullRequest
0 голосов
/ 12 мая 2011

Привет всем, у меня здесь есть небольшая проблема ... если предположить, что я получил файл формата xml, в котором будет какой-то блок под блоками, то теги будут приходить, для некоторых блоков теги не будут повторяться ив некоторых блоках теги будут повторяться, например: *

           <block3>
        <tag>
            <name>113</name>
            <value>FINANCIAL</value>
        </tag>

    </block3>
             <block4>

        <tag>
            <name>32A</name>
            <value>051028EUR9000,71</value>
        </tag>
        <tag>
            <name>32A</name>
            <value>051028EUR7000,71</value>
        </tag>
        <tag>
            <name>33B</name>
            <value>EUR9000,71</value>
        </tag>
        <tag>
            <name>33B</name>
            <value>EUR7000,71</value>
        </tag>
                     <tag>
            <name>71A</name>
            <value>OUR</value>
        </tag>
    </block4>
                   <xsl:for-each select ="block3/tag[name = '113']">
            <xsl:value-of select="value"/>
        </xsl:for-each>,
                   <xsl:for-each select ="block4/tag[name = '32A']">
  <xsl:value-of select="(translate(substring(value,10),',','.'))"/>,<xsl:text/>
        </xsl:for-each>
        <xsl:for-each select ="block4/tag[name = '33B']">
  <xsl:value-of select="(translate(substring(value,1),',','.'))"/>,<xsl:text/>
        </xsl:for-each>

*

Я подготовил нижеприведенную таблицу стилей xsl

Вывод:

еслиотсутствие повторяемости тегов означает

FINANCIAL, 9000.71, EUR9000.71

, но здесь xml-теги повторяются внутри блока, поэтому я хотел бы ожидать результат, подобный

FINANCIAL,9000,71, 9000,71 евро

ФИНАНСОВЫЙ, 7000,71 евро, 7000,71

1 Ответ

0 голосов
/ 12 мая 2011

Если я правильно вас понимаю, вы ищете способ вывода одинаковых данных из всех тегов <block>?

Можете ли вы изменить структуру XML?Было бы полезно, если бы это были не block3 и block4, а только несколько тегов.Тогда вы можете сделать что-то вроде этого:

<xsl:template match="tag">
    <xsl:value-of select="name"/>
    <xsl:value-of select="value"/>
</xsl:template>

Этот шаблон будет соответствовать всем <tag> тегам.Затем вы просто применяете шаблоны к блокам / тегам.

<xsl:apply-templates select="block/tag"/>

Эта строка будет выполнять процесс для каждого тега, который является дочерним по отношению к тегу блока.

Но если вы не можете изменить структуру XML, просто сохраните шаблон и выполните:

`<xsl:apply-templates select="block3/tag"/>
<xsl:apply-templates select="block4/tag"/>`

и т. Д. Для каждого блокаN.

По моему мнению (из того, чему меня учили) использование apply-шаблонов (хотя их труднее понять как новичка, чем для каждого) гораздо лучше, чем использование циклов в XSL, поскольку это язык на основе шаблонов.

Помогает ли это?Ваш вопрос был не очень ясен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...