gpt4 book ai didi

html - 使用 copy-of 和 document() 将 SVG 添加到 XHTML 输出

转载 作者:技术小花猫 更新时间:2023-10-29 11:27:32 26 4
gpt4 key购买 nike

在处理我的 XML 时,我尝试使用以下行将 href 属性引用的 SVG 文件直接复制到我的输出 HTML 中:

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

copy-namespaces 应该不是必需的,因为默认值无论如何都是“yes”,但我添加它是为了防止有人质疑我是否尝试过它。

文件被复制到 HTML 中,但是任何命名空间的元素都被隐藏了。例如,一个文件在被复制之前看起来像这样:

  <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

之后看起来像这样:

  <_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 值上缺少 xlink 命名空间尤其有问题。

关于如何以不同的方式执行此操作以在没有任何解释的情况下读取 SVG 文件有什么想法吗?

我找到了一个“有效”的解决方案,但它是一个 hack,我想要更优雅的东西:

<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>

最佳答案

我认为您已经找到进行此 XSLT 操作的原因:

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

当命名空间转换完成时,在生成输出之前,这会使您的命名空间保持完整。

关于html - 使用 copy-of 和 document() 将 SVG 添加到 XHTML 输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18541462/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com