You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

创建带自定义格式的XML文件:属性及标签需含换行制表符

解决XML属性和标签中包含换行、制表符的问题

我明白你想要在XML的属性和部分标签文本里加入换行(\n)和制表符(\t),但之前的代码没达到预期效果对吧?咱们来一步步解决这个问题:


问题根源分析

你之前的代码是先拼接XML字符串再用XDocument.Parse处理,还尝试了XmlTextWriter,但这里有两个核心问题:

  1. 手动拼接的字符串里没实际包含你需要的换行/制表符内容
  2. XML解析和序列化过程中,空白字符可能被自动处理或忽略

方案一:直接构造XML结构(推荐)

这种方式最可控,不需要手动拼接字符串,直接通过XElement、XAttribute来构建,能直接插入换行和制表符:

// 直接构建XML文档
XDocument doc = new XDocument(
    new XDeclaration("1.0", "UTF-8", null),
    new XElement("PersonLib", new XAttribute("Version", "1.0"),
        // 给Person元素的Info属性加入制表符和换行
        new XElement("Person", 
            new XAttribute("Info", $"姓名:\t张三\n年龄:\t25"),
            // 标签文本里加入换行和制表符
            new XText($"个人简介:\n\t爱好:读书\n\t职业:程序员")
        )
    )
);

// 配置XmlWriter的选项
XmlWriterSettings settings = new XmlWriterSettings
{
    Encoding = Encoding.UTF8,
    Indent = true, // 让XML整体格式化缩进,不影响内容里的空白
    OmitXmlDeclaration = false,
    NewLineHandling = NewLineHandling.None // 保留内容里的原始换行符
};

// 序列化XML并输出
using (StringWriter sw = new StringWriter())
using (XmlWriter writer = XmlWriter.Create(sw, settings))
{
    doc.Save(writer);
    string finalXml = sw.ToString();
    Console.WriteLine(finalXml);
}

运行这段代码后,你会得到包含预期换行和制表符的XML,属性和文本里的空白都会被正确保留。


方案二:用字符串解析的方式(兼容已有字符串场景)

如果一定要从字符串解析XML,记得用XML字符实体来表示换行和制表符(避免解析时被忽略),同时开启空白保留选项:

// 注意:XML里用	表示制表符,
表示换行
string xmlID = @"<?xml version=""1.0"" encoding=""UTF-8""?>
<PersonLib Version=""1.0"">
    <Person Info=""姓名:&#x09;张三&#x0A;年龄:&#x09;25"">个人简介:&#x0A;&#x09;爱好:读书&#x0A;&#x09;职业:程序员</Person>
</PersonLib>";

// 解析时开启PreserveWhitespace,保留所有空白字符
XDocument doc = XDocument.Parse(xmlID, LoadOptions.PreserveWhitespace);

XmlWriterSettings settings = new XmlWriterSettings
{
    Indent = true,
    OmitXmlDeclaration = false,
    NewLineHandling = NewLineHandling.None // 不替换原始换行符
};

using (StringWriter sw = new StringWriter())
using (XmlWriter writer = XmlWriter.Create(sw, settings))
{
    doc.Save(writer);
    string finalXml = sw.ToString();
    Console.WriteLine(finalXml);
}

关键注意点

  • NewLineHandling.None:这个设置很重要,它会让XmlWriter保留你手动添加的换行符,不会自动替换成系统默认的换行格式
  • 直接构造XML比字符串拼接更不容易出错,尤其是处理特殊字符时
  • XML属性里的换行和制表符不需要额外转义(除了XML本身的特殊字符:&、<、>、"、'),直接用\n和\t就行

内容的提问来源于stack exchange,提问作者Programmerzzz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 06:22:43