2011-07-08 16 views
0

私はXSLTをかなり使い慣れており、基本的なXMLからHTMLへの変換を行うためにのみ使用しています。現在、XSLTを使用してXML部品表から部品マニュアルを作成しようとしています。処理中に、私はSVGファイルのコピーを作成し、出力を少し変更する必要があります。しかし、私は自分のXSLTにソースSVGの内容をコピーまたは出力させることはできません。XSLTを使用してSVGファイルを変更する

ここ

は、私が解析しようとしているXMLコードのスニペットです:私のXSLTで

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

、私は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

<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"/>に変更してください。

0

私はあなたが、デフォルトでは、すべてのノードをコピーするXSLTのアイデンティティの変換ルールを、追加する必要があります信じている。そのような規則がなければ

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

、ルールにマッチしていないXMLノードは単に無視されます。

関連する問題