XSL który zwraca XML bez zmian

Szukam fragmentu XSL, który po prostu zwraca niezmieniony XML. Brzmi banalnie, ale nigdzie w sieci nie mogę znaleźć przykładu. Jakaś pomoc?

 24
Author: Dimitre Novatchev, 2008-12-28

3 answers

Aby skopiować kompletny dokument XML, konieczne jest posiadanie szablonu pasującego do katalogu głównego. To może być:

     <xsl:template match="/">

Lub

     <xsl:template match="node()">

Wtedy wystarczy pojedyncze skopiowanie aktualnego węzła (węzła głównego):

<xsl:copy-of select="."/>

Więc jedną z takich transformacji zupełnych jest:

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:template match="/">
      <xsl:copy-of select="."/>
    </xsl:template>
</xsl:stylesheet>

Chociaż jest to prawdopodobnie najprostsza taka transformacja, Programiści XSLT używają inny, powszechnie znany jako identity transformation lub identity rule:

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:template match="node()|@*">
      <xsl:copy>
        <xsl:apply-templates select="node()|@*"/>
      </xsl:copy>
    </xsl:template>
</xsl:stylesheet>

Transformacja tożsamości jest uważana za jeden z najbardziej fundamentalnych wzorców projektowych XSLT i jest tak masowo używana, że nadpisując tę regułę szablonu innymi, bardziej szczegółowymi szablonami, można bardzo łatwo wykonać wiele operacji, które w przeciwnym razie będą trudne. Przykładami są usunięcie określonego(zbioru) elementu (elementów), które mają określoną nazwę lub spełniają inne warunek, zmiana nazw poszczególnych elementów, zmiana przestrzeni nazw poszczególnych elementów, tworzenie nowych dzieci lub rodzeństwa poszczególnych elementów, ..., itd.

Aby uzyskać więcej informacji i fragmenty kodu za pomocą transformacji tożsamości, zajrzyj proszę..

 32
Author: Dimitre Novatchev,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-12-28 21:25:06

Jest to częsty problem, a odpowiedź nazywa się transformatą tożsamości . Poniższy szablon poprawnie skopiuje istniejący XML. Następnie dodajesz dodatkowe szablony, aby zmodyfikować zachowanie (np. usuwając niektóre elementy, zmieniając nazwy elementów lub atrybutów itp.).

<xsl:template match="@*|node()">
   <xsl:copy>
      <xsl:apply-templates select="@*|node()"/>
   </xsl:copy>
</xsl:template>
 10
Author: cletus,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-12-28 21:15:53

A może:

<xsl:template match ="/">
  <xsl:copy-of select="."/>
</xsl:template>
Może jest jeszcze prostszy sposób ?
 0
Author: krosenvold,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-12-28 21:01:22