0

異なる言語の 2 つのテキスト ブロックを使用して、わずかに動的な pdf (2 つの変数) を作成する必要があります。

両方のブロックのほとんどのテキストは静的です

レイアウト用の xsl-fo を作成するテンプレートを 1 つ作成できないかと考えていました。次に、カスタム xml を含む 2 つの変数を作成します。何かのようなもの:

<xsl:variable name="TEXT_CONTENT_ENG" >
  <STATIC_TEXT> 
   <LABEL>Hello</LABEL>
   <REQUEST>Please pay your bill before </REQUEST>
  </STATIC_TEXT>
</xsl:variable>

最後に、これらの変数を使用して、作成したテンプレートを 2 回適用することができました。

xsl は指定された変数で検証するように見えますが、その xml にテンプレートを適用できませんでした。試してみましたが、ドキュメント ($TEXT_CONTENT_ENG) も機能しませんでした。

これは可能ですか?

4

3 に答える 3

1

両方のブロックのほとんどのテキストは静的です

これが当てはまる場合、適切な XSLT の方法はインライン データです。http://www.w3.org/TR/xslt#stylesheet-elementから

さらに、xsl:stylesheet 要素には、XSLT 名前空間以外の要素を含めることができます。ただし、要素の展開名に null 以外の名前空間 URI が含まれている場合に限ります。このような最上位要素の存在によって、このドキュメントで定義されている XSLT 要素と関数の動作が変更されてはなりません。たとえば、そのような最上位要素が、競合を解決するために異なるルールを使用することを xsl:apply-templates に指定することは許可されません。したがって、XSLT プロセッサは常にそのような最上位の要素を自由に無視でき、名前空間 URI を認識しない場合はエラーを出さずに最上位の要素を無視する必要があります。そのような要素は、例えば、

  • 拡張要素または拡張機能によって使用される情報 (
    [14 拡張機能] を参照)、

  • 結果ツリーをどうするかについての情報

  • ソースツリーの入手方法に関する情報

  • スタイルシートに関するメタデータ、

  • スタイルシートの構造化ドキュメント。

<stylesheet version="1.0" xmlns="http://www.w3.org/1999/XSL/Transform">
    <variable name="vRTF">
        <STATIC_TEXT xmlns="">
            <LABEL>Hello</LABEL>
            <REQUEST>Please pay your bill before </REQUEST>
        </STATIC_TEXT>
    </variable>
    <template match="/">
        <apply-templates
              select="document('')/*/xsl:variable[@name='vRTF']/node()"
              xmlns:xsl="http://www.w3.org/1999/XSL/Transform"/>
    </template>
    <template match="@*|node()">
        <copy>
            <apply-templates select="@* | node()"/>
        </copy>
    </template>
</stylesheet>

出力:

<STATIC_TEXT>
    <LABEL>Hello</LABEL>
    <REQUEST>Please pay your bill before </REQUEST>
</STATIC_TEXT>

: XML 1.0 では、デフォルトの名前空間のみをリセットできます。

于 2010-10-20T13:53:42.177 に答える
1

Alejandro の答えはおおむね正しいのですが、名前空間の型にはまらない使用法は少し混乱を招き、彼は不要なxsl:variable要素でデータをラップしており、これもまた少し混乱を招きます。

要素を独自の名前空間に配置する限り、xsl:stylesheet要素の子にすることができます。document('')その後、現在の XSLT ドキュメントを返すを使用してアクセスできます。

<xsl:stylesheet version="1.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:in="urn:inline-data"
    exclude-result-prefixes="in"
>

   <in:TEXT_CONTENT_ENG>
      <STATIC_TEXT> 
         <LABEL>Hello</LABEL>
         <REQUEST>Please pay your bill before </REQUEST>
      </STATIC_TEXT>
   </in:TEXT_CONTENT_ENG>

   <xsl:template match="/">
      <output>
         <xsl:apply-templates 
             select="document('')/xsl:stylesheet/in:TEXT_CONTENT_ENG/*"/>
      </output>
   </xsl:template>

   <xsl:template match="STATIC_TEXT">
      <xsl:text>The label is </xsl:text>
      <xsl:value-of select="LABEL"/>
      <xsl:text> and the request is </xsl:text>
      <xsl:value-of select="REQUEST"/>
   </xsl:template>

</xsl:stylesheet>
于 2010-10-20T16:41:07.547 に答える
0

xalan を使用すると、次のように実行できました。

<xsl:apply-templates select="xalan:nodeset($TEXT_CONTENT_ENG)/STATIC_TEXT"/>

同様の機能は exslt でも利用できます

于 2010-10-20T07:35:44.157 に答える