1

変換中のこの着信 XML を取得しました (msxsm6 を使用して ASP で XSLT を使用):

<Cell>  
  <Data xmlns="http://www.w3.org/TR/REC-html40">  
    <Font>Text1</Font>  
    <Font> </Font>  
    <Font>Text2</Font>  
  <Data>  
</Cell>

<Font> のテンプレートが次の場合:

<xsl:template match="Font">
  <xsl:copy/>
</xsl:template>

変換により、ソースの 2 番目の要素のスペース文字が削除されたように見えます。出力される XML は以下のとおりです。2 番目の要素はコンテンツのない空の要素になります。

    <Font>Text1</Font>  
    <Font/>  
    <Font>Text2</Font>  

<xsl:preserve-space elements="Font"/>' で試行錯誤しましたが、役に立たなかったようです。アイデア?ありがとうスタックオーバーフロー!

4

2 に答える 2

2

まず、スタイルシート フラグメントのサンプルが間違っています。次のようなルールが必要です。

<xsl:template match="html:data//node()|html:data//*/@*"
              xmlns:html="http://www.w3.org/TR/REC-html40"> 
  <xsl:copy>
     <xsl:apply-templates select="node()|@*"> 
  </xsl:copy> 
</xsl:template>

次に、入力空白のみのテキスト ノードについてです。これらは、XML ツリー プロバイダーに応じて保持されます。MSXSL は既定では保持しません。唯一の解決策はxml:space="preserve"、入力ソースに属性を追加することです。

于 2010-10-08T16:07:09.320 に答える
1

のテンプレートが次の場合:

<xsl:template match="Font"> 
  <xsl:copy/> 
</xsl:template>

変換により、ソースの 2 番目の要素のスペース文字が削除されたようです

あなたは間違っ <xsl:copy> ています <xsl:copy-of>

前者は現在の要素とその名前空間ノードのみをコピーし (属性や子孫ノードはコピーしません)、後者は現在のノードをルートとする完全なサブツリーをコピーします。

また、@Alejandro が指摘したように、名前空間に問題があり、提供された XML ドキュメントに適用された場合、提供された XSLT コードが提供された「結果」を生成することは不可能です。

于 2010-10-08T16:23:14.113 に答える