25

xsltを使用してxmlファイルをhtmlに変換しています。.net xsltエンジンは、空のタグの自動終了タグを提供し続けます。

例:

<div class="test"></div> 

になります

<div class="test" />

前者は有効なhtmlですが、後者は違法なhtmlであり、レンダリングが不十分です。私の質問は、xsltエンジン(XslCompiledTransform)に自己終了タグを使用しないように指示するにはどうすればよいですか。

それが不可能な場合、ブラウザ(この場合はIE6 +)に自動終了タグを正しく解釈するように指示するにはどうすればよいですか。

4

12 に答える 12

24

xsl:outputメソッドをhtml(ではなく)に変更しますxml

または、要素をまだ取得していない場合は追加します

<xsl:output method="html"/>
于 2009-05-20T12:59:29.357 に答える
18

回避策は、コメント要素を挿入して、非自己終了の生成を強制することです。

<script type="text/javascript" src="nowhere.js">
<xsl:comment></xsl:comment>
</script>

それはかなりの解決策ではありませんが、うまくいきます:-)

/ステン

于 2012-01-23T12:17:45.617 に答える
11

XmlWriter を出力ストリームとして使用している場合は、代わりに HTMLTextWriter を使用してください。XMLWriter は、HTML 出力を XML に再フォーマットします。

于 2009-05-20T13:54:31.850 に答える
4

これはXslCompiledTransformクラスに関連しています

回避策は次のとおりです。

http://blogs.msdn.com/b/nareshjoshi/archive/2009/01/15/how-to-force-non-self-closing-tags-for-empty-nodes-when-using-xslcompiledtransform-class。 aspx

于 2010-09-15T15:53:21.670 に答える
3

私にとっては、スクリプトタグの問題でした。セミコロン( ; )で埋めることで解決しました

<script type="text/javascript" src="somewhere.js">;</script>
于 2010-11-24T15:22:53.717 に答える
2

無効な HTML を HTML として処理するようブラウザに指示することはできません。幸運なことに、不正な形式の HTML をまったく理解します。:)

スタイルシートで必ずこれを行います:

<xsl:output method="html"/>

ただし、ソース ドキュメントに名前空間がある場合、これではうまくいきません。名前空間ノードが出力に存在する場合、XSLT プロセッサは暗黙のうちに出力メソッドを XML に戻すように見えます。

<xsl:copy-of>要素のすべてのインスタンスと<xsl:copy>要素の作成をローカル名だけに置き換える必要があります。

<xsl:template match="*">
   <xsl:element name="{local-name()}">
     <xsl:apply-templates/>
   </xsl:element>
</xsl:template>

見る

于 2009-05-20T13:08:45.983 に答える
2

以前は<xsl:text>、次のように要素を内部に配置していました。

<script type="text/javascript" src="/scripts/jquery.js"><xsl:text> </xsl:text></script>
于 2011-07-18T22:05:57.067 に答える
0

要素が自己閉鎖するのを防ぎたいときはいつでも、次を使用します。

<xsl:value-of select="''" />

これにより、レンダリング エンジンが要素内にコンテンツがあると信じ込ませ、自己閉鎖を防ぎます。

これは少し醜い修正なので、説明的なテンプレートに含めて、代わりに毎回それを呼び出すことをお勧めします。

<xsl:template name="PreventSelfClosure">
   <xsl:value-of select="''" />
</xsl:template>


<div class="test">
   <xsl:call-template name="PreventSelfClosure"/>
</div>

これにより、次がレンダリングされます。

<div class="test"></div>

http://curtistimson.co.uk/post/xslt/how-to-prevent-self-closing-elements-in-xslt/

于 2014-07-02T15:05:55.927 に答える
0

output/@method=html を使用して、PHP 5 の XSL で同じ問題が発生しました。空の値属性を割り当てると、要素が無効な非自己終了タグ、非終了タグとして出力されるようです。

<input type="text" name="foo" value="{my-empty-value}" />

結果:

<input type="text" name="foo" value="">

考えられる解決策の 1 つは、条件付きで属性を追加することです。

<xsl:if test="string-length(my-empty-value) > 0">
    <xsl:attribute name="value">
        <xsl:value-of select="my-empty-value" />
    </xsl:attribute>
</xsl:if>

その結果:

<input type="text" name="foo" />
于 2012-09-24T14:57:36.287 に答える