3

使用以下代码:

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 中打开时没有。

4

1 回答 1

1

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

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

  1. 使用NewLineChars选项将编写器设置为在编写新行时使用特定字符。

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

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

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()”的调用中。

于 2013-10-12T17:40:47.883 回答