usar tag insertar img iconos con como cargar html xml svg xslt-1.0 xslt-2.0

html - insertar - svg on img tag



Usar copy-of con document() para agregar archivos SVG a la salida XHTML (1)

Creo que has encontrado el motivo de esta operación XSLT:

http://www.w3schools.com/xsl/el_namespace-alias.asp

que deja sus espacios de nombres mutilados intactos hasta que se genera la salida, cuando se realiza la transformación del espacio de nombres.

Al procesar mi XML, intento copiar un archivo SVG al que se hace referencia desde un atributo href directamente en mi HTML de salida con la siguiente línea:

<xsl:copy-of copy-namespaces="yes" select="document(@href)"/>

Los copy-namespaces no deberían ser necesarios ya que el valor predeterminado es "sí" de todos modos, pero lo he agregado para evitar preguntas sobre si lo he intentado o no.

Los archivos se copian en el HTML, pero todos los elementos de espacio de nombres son mangueados. Por ejemplo, un archivo que se ve así antes de ser copiado:

<rdf:RDF> <cc:Work rdf:about=""> <dc:format>image/svg+xml</dc:format> <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/> <dc:title/> </cc:Work> </rdf:RDF> </metadata> <g transform="translate(-519.21143,-667.79077)" id="layer1"> <image xlink:href="data:image/png;base64

Se ve así después:

<_0:RDF xmlns:_0="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> <_0:Work xmlns:_0="http://creativecommons.org/ns#" about=""> <_0:format xmlns:_0="http://purl.org/dc/elements/1.1/">image/svg+xml</_0:format> <_0:type xmlns:_0="http://purl.org/dc/elements/1.1/" resource="http://purl.org/dc/dcmitype/StillImage"/> <_0:title xmlns:_0="http://purl.org/dc/elements/1.1/"/> </_0:Work> </_0:RDF> </metadata> <g id="layer1" transform="translate(-519.21143,-667.79077)"> <image href="data:image/png;base64

El espacio de nombres xlink faltante en el valor href del elemento de la imagen es particularmente problemático.

¿Alguna idea sobre cómo puedo hacer esto de manera diferente para leer en el archivo SVG sin ninguna interpretación?

He encontrado una solución que "funciona", pero es un truco y me gustaría algo más elegante:

<xsl:template name="topic-image-svg"> <!-- Generate tags to embed SWFs --> <xsl:element name="div"> <xsl:if test="@width"> <xsl:attribute name="width"> <xsl:value-of select="@width"/> </xsl:attribute> </xsl:if> <xsl:if test="@height"> <xsl:attribute name="height"> <xsl:value-of select="@height"/> </xsl:attribute> </xsl:if> <xsl:apply-templates select="document(@href)" mode="svg"/> </xsl:element> </xsl:template> <xsl:template match="*" mode="svg"> <xsl:copy copy-namespaces="yes"> <xsl:for-each select="@*"> <xsl:choose> <xsl:when test="self::node()[name() = ''xlink:href'']"> <xsl:attribute name="xlink:href"><xsl:value-of select="."></xsl:value-of></xsl:attribute> </xsl:when> <xsl:otherwise> <xsl:copy></xsl:copy> </xsl:otherwise> </xsl:choose> </xsl:for-each> <xsl:apply-templates mode="svg"></xsl:apply-templates> </xsl:copy> </xsl:template>