Convertir "embarqué" de XML, doc en CDATA sortie en XSLT (1.0)
Donné un document XML d'entrée comme ceci:
<?xml version="1.0" encoding="utf-8"?>
<title> This contains an 'embedded' HTML document </title>
<document>
<html>
<head><title>HTML DOC</title></head>
<body>
Hello World
</body>
</html>
</document>
</root>
Comment je peux extraire que "intérieure" document HTML; rendre comme CDATA et de l'inclure dans mon document de sortie ?
De sorte que le document de sortie sera un document HTML; qui contient une zone de texte montrant les éléments de texte (de sorte qu'il sera de l'affichage de la source-vue de l'intérieur du document).
J'ai essayé ceci:
<xsl:template match="document">
<xsl:value-of select="*"/>
</xsl:template>
Mais cela ne rend les Nœuds de Texte.
J'ai essayé ceci:
<xsl:template match="document">
<![CDATA[
<xsl:value-of select="*"/>
]]>
</xsl:template>
Mais cela échappe à la réelle XSLT et j'obtiens:
<xsl:value-of select="*"/>
J'ai essayé ceci:
<xsl:output method="xml" indent="yes" cdata-section-elements="document"/>
[...]
<xsl:template match="document">
<document>
<xsl:value-of select="*"/>
</document>
</xsl:template>
Cela ne veut insérer une section CDATA, mais le résultat contient toujours juste le texte (dépouillé des éléments):
<?xml version="1.0" encoding="UTF-8"?>
<html>
<head>
<title>My doc</title>
</head>
<body>
<h1>Title: This contains an 'embedded' HTML document </h1>
<document><![CDATA[
HTML DOC
Hello World
]]></document>
</body>
</html>
Pouvez-vous montrer à votre sortie s'il vous plaît?
OriginalL'auteur monojohnny | 2012-09-12
Vous devez vous connecter pour publier un commentaire.
Il y a deux confusions vous devez effacer jusqu'ici.
Tout d'abord, vous voulez probablement
xsl:copy-of
plutôt quexsl:value-of
. Celle-ci retourne la chaîne de valeur d'un élément, le premier renvoie une copie de l'élément.Deuxième, la
cdata-section-elements
attribut surxsl:output
affecte la sérialisation des nœuds de texte, mais pas d'éléments et d'attributs. Une façon d'obtenir ce que vous voulez serait de sérialiser le HTML vous-même, le long de la lignes de la suite (pas testé):Mais le plus rapide serait quelque chose comme la solution suivante (dégoûté lecteurs, arrêtez de lire maintenant), m'a signalé par mon ami Tommie Usdin. Déposer les
cdata-section-elements
attribut dexsl:output
et de remplacer votre modèle pour ledocument
élément avec:merci pour cela. certainement pas pour le cœur bien accroché lecteurs. ou devrais-je dire, de ceux que l'élégance. hhhheee
Pour certaines raisons Saxon 9 insiste sur le fait de s'échapper de la
<![CDATA
de toute façon. Au moins c'est ce qu'il fait dans mon XSLT: github.com/gioele/rng-doc/blob/...En laissant cette note pour quiconque tient en ceci: Si vous utilisez
XmlDocument.CreateNavigator().AppendChild
pour créer le XmlWriter (en C#). la résultante de section CDATA ne seront pas échappé. c'est à dire le résultat sera<![CDATA
au lieu de<![CDATA
OriginalL'auteur C. M. Sperberg-McQueen