代码之家  ›  专栏  ›  技术社区  ›  Haoest

在没有HTML编码的情况下,使用XSL转换最终输出的属性方式是什么?

  •  4
  • Haoest  · 技术社区  · 16 年前

    所以,我正在使用.NET。我有一个XSL文件,C中的XSLTransform对象,它读取XSL文件并将一段XML数据(内部制造)转换为HTML。

    我注意到我的最终输出 < > 自动编码到 &书信电报; &GT; . 我有什么办法可以防止这种情况发生吗?有时我需要加粗或倾斜我的文本,但它被无意中净化。

    3 回复  |  直到 14 年前
        1
  •  4
  •   Marc Gravell    16 年前

    您的XSL文件应该具有:

    • HTML的输出
    • 省略XSLT中使用的所有名称空间

    <xsl:stylesheet version="1.0"
        xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
        xmlns:msxsl="urn:schemas-microsoft-com:xslt"
        exclude-result-prefixes="xsl msxsl">
    
        <xsl:output method="html" indent="no" omit-xml-declaration="yes"/>
    
        <!-- lots -->
    </xsl:stylesheet>
    

    理想情况下,您应该使用接受 TextWriter 或A Stream (不是) XmlWriter )-例如:

    StringBuilder sb = new StringBuilder();
    using (XmlReader reader = XmlReader.Create(source)
    using (TextWriter writer = new StringWriter(sb))
    {
        XslCompiledTransform xslt = new XslCompiledTransform();
        xslt.Load("Foo.xslt"); // in reality, you'd want to cache this
        xslt.Transform(reader, options.XsltOptions, writer);
    }
    string html = sb.ToString();
    

    在XSLT中,如果您真的想要独立 < / > (即,由于某种原因,您希望它的格式不正确),然后需要禁用输出转义:

    <xsl:text disable-output-escaping="yes">
        Your malformed text here
    </xsl:text>
    

    但是,一般来说 对的 以转义字符。

        2
  •  2
  •   David Basarab    16 年前

    在过去,我使用它将XML文档转换为HTML字符串,这正是您需要的。

    public static string TransformXMLDocFromFileHTMLString(string orgXML, string transformFilePath)
    {
        System.Xml.XmlDocument orgDoc = new System.Xml.XmlDocument();
        orgDoc.LoadXml(orgXML);
    
        XmlNode transNode = orgDoc.SelectSingleNode("/");
        System.Text.StringBuilder sb = new System.Text.StringBuilder();
        XmlWriterSettings settings = new XmlWriterSettings();
    
        settings.ConformanceLevel = ConformanceLevel.Auto;
        XmlWriter writer = XmlWriter.Create(sb, settings);
    
        System.Xml.Xsl.XslCompiledTransform trans = new System.Xml.Xsl.XslCompiledTransform();
        trans.Load(transformFilePath);
    
        trans.Transform(transNode, writer);
    
        return sb.ToString();
    }
    
        3
  •  0
  •   Assaf Lavie    16 年前

    (根据msdn,不推荐使用xsltransform。他们建议您切换到XSLCompiledTransform。)

    你能发布一个输入/输出的例子吗?