xsl печатать заголовок при первом появлении узла - PullRequest
1 голос
/ 31 марта 2012

У меня есть простая задача, для которой я не могу найти решение, и я достаточно новичок в xsl, поэтому я не знаю, как с этим справиться. У меня есть список узлов, и при первом появлении узлов я хотел бы напечатать заголовок. E.g.:

выдержка xml

<data>
    <subdata1>value1.1</subdata1>
    <subdata2>value1.2</subdata2>
</data>
<data>
    <subdata1>value2.1</subdata1>
    <subdata2>value2.2</subdata2>
</data>
<data>
    <subdata1>value3.1</subdata1>
    <subdata2>value3.2</subdata2>
</data>

Я бы хотел, чтобы результат был примерно таким:

Subdata1    Subdata2
value1.1    value2.1
value2.1    value2.2
value3.1    value2.3

Перед первым узлом "data" будут какие-то вещи, поэтому я не думаю, что смогу распечатать их раньше времени. Я думал об операторе if с флагом, который будет установлен при первом обнаружении данных, но моя реализация не работала. Есть идеи как это сделать?

Спасибо!

1 Ответ

0 голосов
/ 31 марта 2012

Это преобразование:

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output method="text"/>
 <xsl:strip-space elements="*"/>

 <xsl:template match="data[1]">
  <xsl:text>subdata1&#9;subdata2</xsl:text>
  <xsl:apply-templates select="../data" mode="process"/>
 </xsl:template>

 <xsl:template match="data" mode="process">
  <xsl:value-of select="concat('&#xA;', subdata1, '&#9;',subdata2)"/>
 </xsl:template>

 <xsl:template match="data"/>
</xsl:stylesheet>

при применении к следующему документу XML (предоставленный фрагмент XML, обернутый в один верхний элемент, чтобы стать правильно сформированным документом XML):

<t>
    <data>
        <subdata1>value1.1</subdata1>
        <subdata2>value1.2</subdata2>
    </data>
    <data>
        <subdata1>value2.1</subdata1>
        <subdata2>value2.2</subdata2>
    </data>
    <data>
        <subdata1>value3.1</subdata1>
        <subdata2>value3.2</subdata2>
    </data>
</t>

дает желаемый, правильный результат :

subdata1    subdata2
value1.1    value1.2
value2.1    value2.2
value3.1    value3.2

Пояснение : правильное использование шаблонов и режимов .

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