Erhaltung entity-Referenzen beim transformieren von XML mit XSLT?

Wie kann ich die preserve-entity-Referenzen beim transformieren von XML mit XSLT (2.0)? Mit allen Prozessoren, die ich habe versucht, die Einheit wird standardmäßig aufgelöst. Ich kann verwenden xsl:character-map zu handhaben, die Zeichen-Entitäten, aber was ist mit text-Entitäten?

Beispielsweise das XML:

<!DOCTYPE doc [
<!ENTITY so "stackoverflow">
<!ENTITY question "How can I preserve the entity reference when transforming with XSLT??">
]>
<doc>
  <text>Hello &so;!</text>
  <text>&question;</text>
</doc>

verwandelt sich in die folgenden XSLT:

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

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

</xsl:stylesheet>

erzeugt die folgende Ausgabe:

<doc>
   <text>Hello stackoverflow!</text>
   <text>How can I preserve the entity reference when transforming with XSLT??</text>
</doc>

Die Ausgabe sollte so Aussehen wie die Eingabe (ohne die doctype-Deklaration für jetzt):

<doc>
  <text>Hello &so;!</text>
  <text>&question;</text>
</doc>

Ich bin Hoffnung, dass ich nicht auf pre-Prozess die Eingabe durch den Austausch aller kaufmännisches mit &amp; (wie &amp;question;) und dann post-Prozess die Ausgabe durch den Austausch aller &amp; mit &.

Vielleicht ist das Prozessor-spezifisch ist? Ich bin mit Saxon 9.

Dank!

  • Gute Frage, +1. Die angeforderte Verarbeitung ist fast unmöglich zu tun mit XSLT und ich würde nicht empfehlen, mit meiner Antwort Häufig.
InformationsquelleAutor Daniel Haley | 2011-05-12
Schreibe einen Kommentar