Написание шаблона для XSLT Copy-Of для преобразования сообщения с различиями. Как? - PullRequest
1 голос
/ 20 марта 2012

У меня есть xml-сообщение в формате старой схемы (xsd). Моя новая схема точно такая же, но я вложил элемент в более старую. Например:

Моя старая схема содержала элемент:

<exclude> MyRestriction </exclude>

но моя новая схема выглядит так:

<exclude> <restriction> MyRestriction </restriction> </exclude>

и все сообщение такое же, как и раньше. В прошлый раз я делал копию, но сейчас Мне нужно иметь шаблон, который копирует все, но перемещает значение исключения в тег ограничения. Кто-нибудь может мне помочь, пожалуйста?

Спасибо

Ответы [ 2 ]

2 голосов
/ 20 марта 2012

Вы можете использовать шаблон, чтобы соответствовать тексту в исключить шаблон

<xsl:template match="exclude/text()">
   <restriction><xsl:value-of select="." /></restriction>
</xsl:template>

Таким образом, любые другие дочерние элементы будут сохранены в исключить , если они будуттребуется.

Итак, с учетом следующего XSLT

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
   <xsl:output method="xml" indent="yes"/>

   <xsl:template match="exclude/text()">
      <restriction><xsl:value-of select="." /></restriction>
   </xsl:template>

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

Применительно к следующему XML

<exclude ex="1"> MyRestriction <test>Hello</test> </exclude>

Ниже выводится

<exclude ex="1">
   <restriction> MyRestriction </restriction>
   <test>Hello</test>
</exclude>
1 голос
/ 20 марта 2012

Используйте этот шаблон:

<xsl:template match="exclude">
  <xsl:copy>
    <restriction>
      <xsl:value-of select="."/>
    </restriction>
  </xsl:copy>
</xsl:template>
...