我是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解析器也可能有所帮助。不确定这是否是问题的一部分。
任何人都可以提供的建议将不胜感激。
答案 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节点。