使用XSLT修改SVG文件

时间:2011-07-08 13:25:16

标签: xslt svg

我是XSLT的新手,并且只使用它来进行一些基本的XML到HTML的转换。目前,我正在尝试使用XSLT从XML物料清单创建零件手册。在此过程中,我需要创建一个SVG文件的副本,并对输出进行一些修改。但是,我似乎无法让我的XSLT复制或输出源SVG的内容。

以下是我要解析的XML代码片段:

<Assembly>
  <Item HPN="1234567" Rev="0" Desc="Assembly" Dwg="7654321" DwgRev="8">
</Assembly>

在我的XSLT中,我有以下代码来读取SVG的文件名并复制它:

<xsl:template match="Assembly/Item">
    <xsl:variable name="Dwg"><xsl:value-of select="@Dwg"/></xsl:variable>
    <xsl:variable name="DwgRev"><xsl:value-of select="@DwgRev"/></xsl:variable>
    <xsl:if test="not(@Dwg = preceding::Item/@Dwg)">
        <xsl:call-template name="SVGConversion">
            <xsl:with-param name="Dwg" select="$Dwg"/>
            <xsl:with-param name="DwgRev" select="$DwgRev"/>
        </xsl:call-template>
    </xsl:if>
</xsl:template>

SVGConversion模板保存在已导入主样式表的单独XSLT样式表中。这可能没有必要,但我担心输出方法。

<xsl:output method="xml" indent="no" media-type="image/svg"/>
<xsl:template name="SVGConversion">
    <xsl:param name="Dwg"/>
    <xsl:param name="DwgRev"/>
    <xsl:variable name="SVGCall">document('Drawings/<xsl:value-of select="$Dwg"/>_<xsl:value-of select="$DwgRev"/>.svg')</xsl:variable>
    <xsl:result-document encoding="UTF-8" indent="yes" href="{$ProjectPath}/App/Graphics/{$Dwg}_{$DwgRev}.svg">
        <xsl:apply-templates select="$SVGCall"/>
    </xsl:result-document>
</xsl:template>

此代码在输出位置生成一个SVG文件,其中包含正确的文件名,但它是空的。如何将原始SVG中的代码复制到新的SVG文件中,请记住我还想在处理过程中对部分SVG代码进行修改?

我尝试过使用并获取SVG文件的内容,但结果相同。

知道我正在使用Kernow 1.6.1解析器也可能有所帮助。不确定这是否是问题的一部分。

任何人都可以提供的建议将不胜感激。

2 个答案:

答案 0 :(得分:0)

我认为您只需要<xsl:variable name="SVGCall">document('Drawings/<xsl:value-of select="$Dwg"/>_<xsl:value-of select="$DwgRev"/>.svg')</xsl:variable>而不是<xsl:variable name="SVGCall" select="document(concat('Drawing/', $Dwg, '_', $DwgRev, '.svg'))"/>

当您处于此状态时,请将<xsl:variable name="Dwg"><xsl:value-of select="@Dwg"/></xsl:variable>之类的内容更改为<xsl:variable name="Dwg" select="@Dwg"/>

答案 1 :(得分:0)

我相信你应该添加一个XSLT身份转换规则,默认情况下会复制所有节点:

http://en.wikipedia.org/wiki/Identity_transform#Using_XSLT

如果没有这样的规则,将忽略规则不匹配的XML节点。