Question

Situation:

J'ai une simple XML document qui contient les informations de l'image.J'ai besoin de la transformer en HTML.Cependant, je ne vois pas où la balise d'ouverture et quand j'utilise le XSL le code ci-dessous, il affiche le message d'erreur suivant:

"Ne peut pas écrire un nœud d'attribut lorsque aucun élément balise de début est ouvert."

Contenu XML:

<root>
    <HeaderText>
        <HeaderText>Dan Testing</HeaderText>
    </HeaderText>
    <Image>
        <img width="100" height="100" alt="FPO lady" src="/uploadedImages/temp_photo_small.jpg"/>
    </Image>
    <BodyText>
        <p>This is a test of the body text<br  /></p>
    </BodyText>
    <ShowLinkArrow>false</ShowLinkArrow>
</root>

Code XSL:

<xsl:stylesheet version="1.0" extension-element-prefixes="msxsl"
    exclude-result-prefixes="msxsl js dl" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:js="urn:custom-javascript" xmlns:msxsl="urn:schemas-microsoft-com:xslt"
    xmlns:dl="urn:datalist">
    <xsl:output method="xml" version="1.0" omit-xml-declaration="yes" indent="yes" encoding="utf-8"/>
    <xsl:template match="/" xml:space="preserve">
        <img>
            <xsl:attribute name="width">
                100
            </xsl:attribute>
            <xsl:attribute name="height">
                100
            </xsl:attribute>
            <xsl:attribute name="class">
                CalloutRightPhoto
            </xsl:attribute>
            <xsl:attribute name="src">
                <xsl:copy-of select="/root/Image/node()"/>
            </xsl:attribute>
        </img>
    </xsl:template>
</xsl:stylesheet>
Était-ce utile?

La solution

Juste pour clarifier le problème, ici l'erreur est dans le code suivant:

<xsl:attribute name="src">
    <xsl:copy-of select="/root/Image/node()"/>
</xsl:attribute>

L'instruction xsl:copy-of prend un nœud ou un nœud et fait une copie de celui - ci- de la sortie d'un nœud ou un node-set.Toutefois, un attribut ne peut pas contenir un nœud, seulement une valeur textuelle, donc xsl:value-of serait une solution possible (ce qui renvoie la valeur textuelle d'un nœud ou un ensemble de nœuds).

Une période BEAUCOUP plus courte de la solution (et peut-être plus élégant) serait la suivante:

<img width="100" height="100" src="{/root/Image/node()}" class="CalloutRightPhoto"/>

L'utilisation de la {} dans l'attribut est appelé une Valeur d'Attribut de Modèle, et peut contenir n'importe quel expression XPATH.

Remarque, la même XPath peut être utilisé ici comme vous l'avez utilisé dans le xsl_copy-comme il sait prendre de la valeur textuelle dans une Valeur d'Attribut de Modèle.

Autres conseils

Ne pourrait-il pas être:

<xsl:value-of select="/root/Image/img/@src"/>

?Il semble que vous essayez de copier la totalité de l'Image/img nœud à l'attribut @src

Pour ajouter des attributs, XSL veut

<xsl:element name="img">
     (attributes)
</xsl:element>

au lieu de simplement

<img>
     (attributes)
</img>

Bien que, oui, si vous êtes juste de copier l'élément que-est, vous n'avez pas besoin de tout cela.

Jamais l'esprit, je suis un idiot.J'ai juste besoin <xsl:value-of select="/root/Image/node()" />

L'autre option à essayer est un simple

<img width="100" height="100" src="/root/Image/image.jpeg" class="CalloutRightPhoto"/>

c'est à diresans {} mais au lieu de donner directement le chemin de l'image

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top