4

XSLTスタイルシートからXSLTドキュメントを動的に生成しようとしています。もちろん、これは原則として機能しますが、名前空間が機能しません。生成されたXSLT要素に「xsl」プレフィックスを付ける必要があります。

<xsl:stylesheet ...>

それよりも

<stylesheet xmlns="http://www.w3.org/1999/XSL/Transform">

xsl:elementのnamespace = ""とxsl:namespaceをいじってみましたが、機能しません(xslt2 / saxonが利用可能)

ヒントはありますか?

4

3 に答える 3

4

XSLTを使用してXSLTコードを作成する場合は、http://www.w3.org/TR/xslt20/#element-namespace-aliasを使用すると次のようになります。

<xsl:stylesheet
  version="2.0"
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns:fo="http://www.w3.org/1999/XSL/Format"
  xmlns:axsl="file://namespace.alias">

<xsl:namespace-alias stylesheet-prefix="axsl" result-prefix="xsl"/>

<xsl:template match="/">
  <axsl:stylesheet version="2.0">
    <xsl:apply-templates/>
  </axsl:stylesheet>
</xsl:template>

<xsl:template match="elements">
  <axsl:template match="/">
     <axsl:comment select="system-property('xsl:version')"/>
     <axsl:apply-templates/>
  </axsl:template>
</xsl:template>

<xsl:template match="block">
  <axsl:template match="{.}">
     <fo:block><axsl:apply-templates/></fo:block>
  </axsl:template>
</xsl:template>

</xsl:stylesheet>
于 2012-06-26T11:22:23.677 に答える
1

このxsl:namespace-alias手順は、まさにこのユースケースを念頭に置いて設計されています。作業で使用を開始するだけです。

実際の例を次に示します。

http://dnovatchev.wordpress.com/2006/10/21/a-stylesheet-to-write-xslt-code/

于 2012-06-26T12:09:19.000 に答える
1

私は解決策を見つけました:

<xsl:element name="xsl:stylesheet">
</xsl:element>

仕事をします!(つまり、namespace = ""の使用は避けますが、名前空間プレフィックスを明示的にリストします)

于 2012-06-26T11:27:26.247 に答える