XslCompiledTransform换行符,如何输入?

时间:2013-10-09 14:26:10

标签: c# linq-to-xml xslcompiledtransform

使用以下代码:

XDocument transformedDoc = new XDocument();
        using (XmlWriter writer = transformedDoc.CreateWriter())
        {
            XslCompiledTransform transform = new XslCompiledTransform();
            //transform.Load(XmlReader.Create(new StringReader(HttpContext.Current.Server.MapPath("~/XML/CareLog.xsl"))));
            transform.Load(HttpContext.Current.Server.MapPath("~/XML/CareLog.xsl"));
            transform.Transform(doc.CreateReader(), writer);
        }

我有一些来自数据库的字符串,其中包含<br />的行返回(在别处使用)。无论我用Environment.NewLine,\ n等替换它,它都不会在转换后的文档中添加换行符。

修改

用\ r \ n替换了换行符,并根据以下建议进行了更改:

var xslt = new XslCompiledTransform();
xslt.Load(HttpContext.Current.Server.MapPath("~/XML/CareLogresidenceSummary.xsl"));
var settings = xslt.OutputSettings.Clone();
settings.NewLineChars = "\n";
using (var reader = doc.CreateReader())
{
    using (var writer = XmlWriter.Create(HttpContext.Current.Server.MapPath("~/BrowserTemp/CareLogResidenceSummary.xml"), settings))
    {
        xslt.Transform(reader, writer);
    }
}

仍然可以创建转换后的文档,但仍然没有将任何内容放到新行上。作为参考,我将带有.doc扩展名的转换后的文档重命名为以word打开,XML具有换行符,但在Word中打开时却没有。

1 个答案:

答案 0 :(得分:1)

您应该使用“\ r \ n”来表示新行。

有两种方法可以处理换行符:

  1. 使用NewLineChars选项设置编写器以使用特定字符。

  2. 指示作者不要使用NewLineHandling选项修改新行

  3. 因此,您可以按如下方式修改代码以保留新行:

    var xslt = new XslCompiledTransform();
    xslt.Load(HttpContext.Current.Server.MapPath("~/XML/CareLog.xsl"));
    var settings = xslt.OutputSettings.Clone();
    settings.NewLineChars = "\n";
    settings.NewLineHandling = NewLineHandling.Replace;
    using (var reader = XmlReader.Create("example.xml"))
    {
     using (var writer = XmlWriter.Create("yourDoc.txt", settings))
     {
       xslt.Transform(reader, writer);
     }
    }
    

    请注意,我还没有运行它。您唯一需要做的就是将文件调用“XmlWriter.Create()”。