-2

次のような状況があります。

<List>
     <Entry>
     <![CDATA[......]]>
     </Entry>
     <Entry>
     <![CDATA[......]]>
     </Entry>
     ...
</List>

CDATA セクションには、エンコードされたバイトが含まれます。各エントリの cdata には、最初のワードとして制御ワードがあり、ファイルに入れるデータの長さと、そのファイルにシークするデータの量を記述します。例: 00060000abcdef は、"abcdef" を含み、0 をシークする長さ 6 のファイルを意味します。出力は、abcdef を含むファイルである必要があります。

XSLT は、特定の方法で CDATA を解釈してファイルに書き込むための正しい選択ですか?

  1. Xalan のように redirect:write を使用することを考えることができます
  2. これを処理するには、パーサー ハンドラーに割り込む何らかのカスタム XSLT 関数を使用します。

    <xsl:MyFunc></xsl:MyFunc>
    
  3. for、if などを使用してカスタム XSLT 関数をタグとして記述する方法はありますか?

Dimitre Novatchev のフィードバック後の編集:

返信ありがとうございます!以下で質問が明確になることを願っています。ごめん。

入力 XML ファイル:

<File>
  <Chunk>
      <Offset>200</Offset>
      <Length>100</Length>
      <Data>
          <![CDATA[data bytes that can be greater than 100 too, but first 100 is valid.]]>
      </Data>
  </Chunk>
  ...
</File>

出力は、次のような html ファイルである必要があります。

<html>
   <body>
       <a href="resulting_file">file</a>
   </body>
</html>
4

2 に答える 2

0

XSLTの場合、XML入力にCDATAセクションがあるかどうかは関係ありません。XSLTデータモデルはノードのツリーであるためEntry、テキストを含む単一の子テキストノードを持つ要素があります(例:サンプル

 <Entry>
 <![CDATA[......]]>
 </Entry>

要素には、Entry改行、いくつかのスペース文字、改行、いくつかのスペース文字を含む単一のテキストノードが含まれます......

次に、XSLTおよびXPath文字列関数を使用してテキストノードの文字列値を処理できます。

于 2012-09-15T16:29:41.823 に答える
0
  1. XSLT は、特定の方法で CDATA を解釈してファイルに書き込むための正しい選択ですか?
  1. はい、CDATA は単なるテキスト ノード (の一部) であり、他のテキスト ノードと同様に処理されます。

  2. はい、XSLT 2.0xsl:result-document命令は、(おそらく多くの異なる) ファイルへの書き込みに使用されます。

.2. これを処理するには、パーサー ハンドラーに割り込む何らかのカスタム XSLT 関数を使用します。

<xsl:MyFunc></xsl:MyFunc>

はい、これは標準の XSLT 2.0 命令を使用して行われますxsl:function

3.Is there a way to write custom XSLT functions as tags using for, if etc.?

この質問は明確ではありません。 xsl:for-eachXSLT には、xsl:ifxsl:choosexsl:whenxsl:otherwise、 ... などのような多くの命令があります。

XPath 2.0 (XSLT 2.0 内で使用される) x は、独自のfor, if then else,returnとして使用されます。

于 2012-09-15T18:31:10.783 に答える