Как обратить вспять теги XML данных с помощью XSLT? - PullRequest
2 голосов
/ 08 апреля 2011

Например, ниже XML-файла.

<person>
<name>Adam</name>
<lname>Palmer</lname>
<profession> Programmer</profession>
<salary>80,000</salary>
</person>

Теперь, в XSLT, если я кодирую,

<xsl:template match="person">
 <xsl:apply-templates/><xsl:text> </xsl:text>
</xsl:template>

Итак, в HTML-файле будет отображаться: Adam Palmer Programmer 80 000.

Но мне нужен следующий вывод: Palmer Adam Programmer 80 000.

Мне нужно изменить порядок первых двух тегов данных.

Любые люди идеи

Ответы [ 2 ]

1 голос
/ 08 апреля 2011

Таблица стилей Push:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:strip-space elements="*"/>
    <xsl:template match="person/*">
        <xsl:apply-templates/>
        <xsl:text>&#x20;</xsl:text>
    </xsl:template>
    <xsl:template match="person">
        <xsl:apply-templates select="lname"/>
        <xsl:apply-templates select="name"/>
        <xsl:apply-templates select="*[not(self::name|self::lname)]"/>
        <xsl:text>&#xA;</xsl:text>
    </xsl:template>
</xsl:stylesheet>

Вывод:

Palmer Adam  Programmer 80,000
1 голос
/ 08 апреля 2011

Вы можете легко обработать тег для тега.

Но если логика подходит для чего угодно, кроме имени и имени, я бы их изолировал.

как это:

<person>
<name>
  <fname>Adam</fname>
  <lname>Palmer</lname>
</name>
<profession> Programmer</profession>
<salary>80,000</salary>
</person>

таким образом вы можете добавить отдельный шаблон для тега <name>.

Конечно, часто структура xml не изменяется, чем вы можете:

<xsl:template match="person">
 <xsl:apply-templates select="lname"/></xsl:text>
 <xsl:apply-templates select="name"/></xsl:text>
 < -- rest of the tags --> 
</xsl:template>


<xs:template match="lname>
   <xsl:value-of "." />
</xsl:template>    


<xs:template match="name>
   <xsl:value-of "." />
</xsl:template>

и т. Д.

Этот способ может привести к созданию еще большего количества подобного кода, но вы получите гибкость (когда тегам нужна отдельная логика)

ПРИМЕЧАНИЕ: это может быть не материал для вставки копии, а просто набранный без возможности тестирования, хотя логика остается.

...