XML'imi işlerken, bir href
öznitelikten referans verilen bir SVG dosyasını aşağıdaki satırla doğrudan çıktı HTML'ime kopyalamaya çalışıyorum :
<xsl:copy-of copy-namespaces="yes" select="document(@href)"/>
copy-namespaces
Varsayılan değer zaten "evet" olduğu için gerekli olmayabilir, ama ben bunu denedim olsun veya olmasın hakkında sorular önlemek için ekledik.
Dosyalar HTML'ye kopyalanır, ancak ad alanlı öğeler eklenir. Örneğin, kopyalanmadan önce şuna benzeyen bir dosya:
<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
Daha sonra şuna benziyor:
<_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
href
Görüntü öğesinin değerindeki eksik xlink ad alanı özellikle sorunludur.
SVG dosyasında yorum yapmadan okumak için bunu nasıl farklı şekilde yapabileceğime dair herhangi bir fikriniz var mı?
"Çalışan" bir çözüm buldum, ancak bu bir hack ve daha zarif bir şey istiyorum:
<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>