Инвертирование данных и атрибутов с использованием XSLT - PullRequest
2 голосов
/ 01 мая 2011

Используя XSLT, я хочу преобразовать этот XML:

<exchangeRates>
    <rate country="aud">0.97</rate>
</exchangeRates>

в этот XML:

<xchgRates>
    <entry xrate="0.97">aud</entry>
</xchgRates>

EDIT: exchangeRates должен стать xchgRates.Изменено xRate на xrate для соответствия правильному решению.

Спасибо за вашу помощь, ребята!

Ответы [ 2 ]

2 голосов
/ 01 мая 2011

Я не пробовал это, но что-то вроде этого должно работать:

<xsl:template match="exchangeRates/rate">
    <entry>
         <xsl:attribute name="xRate"><xsl:value-of select="." /></xsl:attribute>
         <xsl:value-of select="@country" />
    </entry>
</xsl:template>
1 голос
/ 01 мая 2011

Полное и краткое решение :

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>
 <xsl:strip-space elements="*"/>


 <xsl:template match="node()|@*">
  <xsl:copy>
   <xsl:apply-templates select="node()|@*"/>
  </xsl:copy>
 </xsl:template>

 <xsl:template match="exchangeRates">
  <xchgRates>
   <xsl:apply-templates select="node()|@*"/>
  </xchgRates>
 </xsl:template>

 <xsl:template match="rate">
  <entry xrate="{.}">
   <xsl:value-of select="@country"/>
  </entry>
 </xsl:template>
</xsl:stylesheet>

когда это преобразование применяется к предоставленному документу XML:

<exchangeRates>
    <rate country="aud">0.97</rate>
</exchangeRates>

желаемый, правильный результат получается :

<xchgRates>
   <entry xrate="0.97">aud</entry>
</xchgRates>

Объяснение :

  1. Использование и переопределение правила идентификации / template

  2. Использование AVT ( Шаблоны-значения-атрибуты ) рекомендуется, так как для этого требуется меньше набирать текст и получается более короткий, более понятный и понятный код .

Почти все атрибуты инструкций XSLT с несколькими исключениями (в частности, атрибут select) допускают AVT.

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