XSLT转义>

时间:2011-01-17 19:27:51

标签: xslt escaping xslt-1.0

我有一个像很多人逃避>的问题标志。 数据xml文件看起来像

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

使用xslt我想创建一个c#函数。检查是在if语句中使用的项目。

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"/>无法使用,因为我无法在模板中使用此数据。

disable-output-escaping只返回&gt;

希望你有一个有效的解决方案。

感谢你 预先

2 个答案:

答案 0 :(得分: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. 当输出方法为“text ”时,XML文档中转义的所有字符,例如&<({{1} },>&quot;通常根本不需要转义)在输出中未转义。

  2. 始终尽量避免使用DOE - 几乎不需要它。

答案 1 :(得分:0)

谢谢你的帮助,但它不是解决方案,得到了一位朋友的帮助,他告诉我,我在调用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");

现在有效了