2

私はこのコードを持っています:

<a>
   <xsl:attribute name="href">
        <xsl:value-of select="$foo"/>
   </xsl:attribute>
   bar
</a>

問題は私が得る変換後です:

<a href="&#xA;                PooValue        &#xA;"                 >bar</a>

私のxsl:outputはindent="no"です。

VisualStudioはすべてのファイルをインデントします。したがって、コードを1行の作業に入れますが

<a><xsl:attribute name="href"><xsl:value-of select="$foo"/></xsl:attribute>bar</a>

最初はあまり読みにくく、VSはインデントを変更するので、別の解決策が必要です。すこし :

<xsl:attribute name="href" select="concat(mystuff)" />

しかし、それは存在せず、また非常に読みやすくはありません。

他の解決策は次のとおりです。

<a href="{$foo}" >bar</a>

しかし、どうすればこれで以下のようなxsl処理を使用できますか?

<a>
       <xsl:attribute name="href">
             <xsl:choose >
                 <xsl:when test="$atest">
                    <xsl:value-of select="$foo"/>
                 </xsl:when>
                 <xsl:otherwise>
                    <xsl:value-of select="$foo2"/>
                 </xsl:otherwise>
             </xsl:choose >
       </xsl:attribute>
       bar
    </a>

使用: <xsl:value-of select="normalize-space($foo)"/>効果はありません原因:との間に
&#xA;作成されます
<xsl:attribute name="href"><xsl:value-of select="normalize-space($foo)"/>

私はxslt 1.0 C# .net 4一緒に働きますXslCompiledTransform

詳細:XslCompiledTransformの結果を

4

3 に答える 3

2

インライン評価構文を使用します。

<a href="{$foo}" />

ただし、別の問題があるようです。
表示されるスペースと新しい行は、XSLテンプレートからではなく、データソースからのものです。

その場合、以下を使用できます。

<a>
  <xsl:attribute name="href">
    <xsl:value-of select="normalize-space($foo)"/>
  </xsl:attribute>
  bar
</a>

編集:

この動作を再現できるのは、次のように明示的に言った場合のみです。

<a>
  <xsl:attribute name="href" xml:space="preserve">
    <xsl:value-of select="$foo"/>
  </xsl:attribute>
  bar
</a>

その場合は、

<a>
  <xsl:attribute name="href" xml:space="default">
    <xsl:value-of select="$foo"/>
  </xsl:attribute>
  bar
</a>
于 2011-08-05T08:03:32.253 に答える
1

スタイルシートのどこかにxml:space属性があるかどうかを確認してください。これにより、xsl:attribute命令の空白が重要として扱われるようになります。

于 2011-08-05T14:10:50.290 に答える
0

内の空白(スペースと改行)<a>は重要であると見なされています。

XSLTプロセッサがその空白を確実に無視するようにする場合は、xsl:text要素内にテキスト「bar」を配置します。

<a>
   <xsl:attribute name="href">
        <xsl:value-of select="'foo'"/>
   </xsl:attribute>
   <xsl:text>bar</xsl:text>
</a>

このように、出力に含めたいテキストは、内にあるものだけであることは明らかですxsl:text

上記のサンプルから次の出力が得られます。

<a href="foo">bar</a>

もう少し冗長ですが、出力したいテキストを中に入れると、xsl:textランダムなスペースやキャリッジリターンが含まれるのではなく、必要なテキストだけが出力に含まれるようになります。自由にフォーマットできます。 XSLTは、どのスペースや改行が含まれるかを気にする必要はありません。

于 2011-08-06T23:39:42.547 に答える