【问题标题】:XSLT escaping >XSLT 转义 >
【发布时间】:2011-01-17 19:27:50
【问题描述】:

像很多人一样,我遇到了逃避 > 符号的问题。 数据 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 ) 

}

&lt;xsl:value-of cdata-section-elements="check"/&gt; 无法使用,因为我无法在模板中使用此数据。

disable-output-escaping 只返回 &amp;gt;

希望你们中的一个人有一个可行的解决方案。

谢谢你 前进

【问题讨论】:

  • 好问题,+1。请参阅我的答案以获得完整且非常简单的解决方案。 :)
  • 你写了 我有一个问题,就像很多人一样,逃避 > 标志。这不是一个问题,而是一个声明。任何 XML 使用者都知道如何处理字符实体。有些人在尝试使用没有 XML 投诉消费者的 XML 文档时遇到问题。
  • 另外,不清楚需要使用的序列化方式。正如@Dimitre 的回答所指出的那样,text 序列化方法没有执行转义。

标签: xslt escaping xslt-1.0


【解决方案1】:

您根本不需要 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文档中任何被转义的字符,如&amp;&lt;&gt;&amp;quot;&amp;apos; 通常根本不需要转义)在输出中产生未转义。

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

【讨论】:

    【解决方案2】:

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

    现在成功了

    【讨论】:

    • 使用XslCompiledTransform 类而不是旧的XslTransform 类与您定义不明确的问题无关
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多