2009-09-02 6 views
7

J'ai quelques éléments de traitement-instructions à l'intérieur de mon contenu XML, par exemple:Comment faire correspondre l'élément processing-instruction dans XSLT?

<?legalnoticestart?> 
<?sourcenotestart?> 
<para>Content para</para> 
<?sourcenoteend?> 
<?literallayoutstart?> 
<para>body content </para> 
<?literallayoutend?> 
<?legalnoticeend?> 

Comment puis-je correspondre à ces éléments et obtenir le contenu dans le format des éléments ci-dessous requis?

xml requis:

<legalnotice> 
<sourcenote> 
<p>Content para</p> 
</sourcenote> 
<literallayout> 
<p>body content</p> 
</literallayout> 
</legalnotice> 

conseils S'il vous plaît ....

Cordialement, Antony

Répondre

17

Par défaut, un processeur XSLT ignorera IPs - pour les faire correspondre afin de faire choses amusantes et utiles, vous pouvez utiliser le instruction-traitement correspondre à votre modèle:

<xsl:template match="processing-instruction('legalnoticestart')"> 
    <legalnotice><xsl:value-of select="."/></legalnotice> 
</xsl:template> 

Par exemple, la feuille de style suivante:

<?xml version="1.0" encoding="ISO-8859-1"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:template match="doc"> 
     <xsl:apply-templates select="processing-instruction('legalnoticestart')" /> 
    </xsl:template> 

    <xsl:template match="processing-instruction('legalnoticestart')"> 
     <legalnotice><xsl:value-of select="."/></legalnotice> 
    </xsl:template> 
</xsl:stylesheet> 

Avec ce document:

<doc> 
    <?legalnoticestart?> 
    <?legalnoticeend?> 
</doc> 

Rendement:

<?xml version="1.0"?> 
<legalnotice> 
</legalnotice> 
+0

Désolé, cela ne fonctionne pas, je reçois juste le contenu sans aucun élément. – Antony

+0

salut, je ne reçois pas le contenu lorsque j'utilise votre deuxième code ... je ne reçois que cet élément ... – Antony

+1

Alors ça marche, alors! Mon code était seulement un extrait pour montrer comment vous vous y preniez. – butterchicken

2

C'est en soi une mauvaise conception, vous semblez essayer pour faire correspondre les balises start/end mais sans utiliser les méthodes disponibles si vous deviez utiliser un élément XML réel.

Bien que vous puissiez faire correspondre les instructions de traitement de début/de fin, il est difficile avec xpath de localiser les noeuds entre lesdites instructions de traitement. Si vous avez imbriqué ou répété de telles instructions, cela peut devenir encore plus difficile. Et à la fin de la journée, tout ce que fait est d'essayer de reproduire ce que xml fait déjà sans utiliser xml?

Questions connexes