7

XslCompiledTransformXMLファイルをHTMLに変換するために使用しています。自己終了タグの使用を防ぐ方法はありますか?

例えば

<span></span> <!-- I want this even if content empty -->
<span/> <!-- stop doing this! ->

スパンの自己終了タグは、使用するブラウザーに関係なくドキュメントを台無しにします。これは有効な XML ですが、「スパン」に自己終了タグを含めることが許可されていないだけです。

自己終了タグが使用されないようにするために、xsl または C#.Net コードに入れることができる設定はありますか?

4

4 に答える 4

2

これを直接的な解決策として分類することはできませんでしたが (空の要素を生成しないため)、使用した回避策は、要素に (xsl:text を使用して) スペースを入れることでした。これは HTML マークアップであるためです。 Standards モード (quirks ではない) をアクティブにしている場合、余分なスペースはレンダリングされたコンテンツを変更しません。また、変換オブジェクトの呼び出しを制御することもできませんでした。

<div class="clearBoth"><xsl:text> </xsl:text></div>
于 2011-11-13T21:52:34.907 に答える
0

XSLT で使用<xsl:output method="html"/>し、スタイルシートが作成する HTML 結果要素が名前空間にないことを確認してください。さらに、C# コードで XslCompiledTransform を使用する方法によっては、スタイルシートの設定が尊重されるようにする必要がありxsl:outputます。ファイル、ストリーム、または TextWriter に変換することで簡単に実現できます。その場合、何もする必要はありません。ただし、何らかの理由で XmlWriter に変換する場合は、適切な設定で作成されていることを確認する必要があります。

XslCompiledTransform proc = new XslCompiledTransform();
proc.Load("sheet.xsl");

using (XmlWriter xw = XmlWriter.Create("result.html", proc.OutputSettings))
{
  proc.Transform("input.xml", null, xw);
}

ただし、通常は Stream または TextWriter に変換するだけで問題ありません。その場合、スタイルシートの出力メソッドを尊重するために C# コードで何もする必要はありません。

于 2011-08-23T09:54:16.357 に答える
0

を試すことはできますが<xsl:output method="html"/>結果は整形式の XML ドキュメントではなくなります。

または、独自のXmlWriterパラメーターの 1 つとして渡すXslCompiledTransform.Transform()メソッドを呼び出すことができます。実装では、完全に制御でき、必要な結果ツリーのシリアル化を実装できます。

于 2011-08-23T04:18:17.630 に答える
0

私が見つけた唯一の解決策は、XSL ファイルにロジックを追加することです。基本的に、スパンしたい要素が空の場合は、スパン要素をまったく使用しないでください。

<xsl:if test="count(jar/beans) > 0">
   <xsl:apply-templates select="jar/beans"/>
</xsl:if>

これを xsl ファイルのどこにでも挿入する必要があるのは理想的ではありません。これは、出力方法として "html" を選択しても、喜んで違法な HTML が生成されるという事実を補うためです。

はぁ。

于 2011-08-25T13:45:13.570 に答える