2011-01-17 7 views
2

私は>記号をエスケープすると多くの人のような問題があります。 データxmlファイルには、私はC#の関数を作成したいXSLTでXSLTエスケープ>

<XML> 
<check><![CDATA[value > 60]]></check> 
</Xml> 

のように見えます。チェックは、ifステートメントで使用されたアイテムです。私はテンプレートでこのデータを使用することはできませんbecouse

public void product(int value) 
{ 
if(<xsl:value-of disable-output-escaping="yes" select="actie" />) 

this should be: if(value > 60) but returns if(value &gt; 60) 

} 

<xsl:value-of cdata-section-elements="check"/>を使用することはできません。

無効にする出力エスケープはちょうどUの1は実用的なソリューションを持っている&gt;

希望を返します。 事前に

+0

良い質問、+1を働きました。完全で非常に簡単な解決策については私の答えを見てください。 :) –

+0

あなたは書いている*私は>サイン*を逃げて多くの人のような問題がある。それは質問ではなく、声明です。どのXMLコンシューマも、文字エンティティを処理する方法を知っています。XMLを使わずにXML文書を使用しようとすると、問題を抱える人がいます。 –

+0

また、使用する必要があるシリアライズ方法が明確ではありません。 @ Dimitreの答えが指摘するように、 'text'直列化メソッドでエスケープされていません。 –

答えて

0

おかげで助けをVORが、それは解決策ではありませんでした、私はDIT何だったXSLTファイル を呼び出すに私は間違ってそれをやっていた私に言った友人からいくつかの助けがあった:

XPathDocument myXPathDoc = new XPathDocument("../../file.xml"); 
XslTransform myXslTrans = new XslTransform(); 
myXslTrans.Load("../../file.xslt"); 
XmlTextWriter myWriter = new XmlTextWriter("../../file.txt", null); 
myXslTrans.Transform(myXPathDoc, null, myWriter); 

は、私はそれを変更:

XslCompiledTransform myXslTrans = new XslCompiledTransform(); 
myXslTrans.Load("../../file.xslt"); 
myXslTrans.Transform("../../file.xml", "../../file.cs"); 

今では

+0

古い 'XslTransform'クラスの' XslCompiledTransform'クラスisteadを使用することはあなたのあまりよく定義されていない質問とは関係ありません –

2

をあなたに感謝

あなたは全くDOEは必要ありません。ただ、を指定:

<xsl:output method="text"/> 

と結果がをエスケープを解除されます。ここ

が小さい例ある:

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output method="text"/> 

    <xsl:template match="/*"> 
    public void product(int value) 
     { 
     if(<xsl:value-of select="check" />) 
     } 
    </xsl:template> 
</xsl:stylesheet> 

この変換は、(使用されない)任意のXML文書に適用される場合、所望の、正しい結果がが生成される:

public void product(int value) 
     { 
     if(value > 60) 
     } 

覚えていること

  1. 出力方法は、「テキスト」、XML文書内のエスケープされている任意の文字、など&<である場合には(>&quot;&apos;通常はすべてエスケープする必要はありませんが)でエスケープを生産しています出力。

  2. DOEを常に使用しないようにしてください。ほとんど必要ありません。