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

C#中编写XML值的方式?如何生成自闭合XML元素

C# 编写XML值的常见方式及自闭合元素生成方案

一、C#中编写XML值的几种常用方式

1. XmlWriter

适合处理大型XML文件,内存占用低,采用流式写入模式:

var settings = new XmlWriterSettings { Indent = true };
using (var writer = XmlWriter.Create("output.xml", settings))
{
    writer.WriteStartDocument();
    writer.WriteStartElement("root");
    // 按需写入元素、属性、文本内容等
    writer.WriteEndElement();
    writer.WriteEndDocument();
}

2. LINQ to XML(XDocument)

语法简洁,基于DOM操作,适合中小型XML文档的快速构建:

var doc = new XDocument(
    new XDeclaration("1.0", "utf-8", "yes"),
    new XElement("root",
        new XElement("value1", new XAttribute("name", "value2"))
    )
);
doc.Save("output.xml");

3. XmlSerializer

直接将.NET对象序列化为XML,适合对象与XML结构一一对应的场景:

public class ValueItem
{
    [XmlAttribute]
    public string name { get; set; }
}

var serializer = new XmlSerializer(typeof(ValueItem));
using (var writer = new StreamWriter("output.xml"))
{
    serializer.Serialize(writer, new ValueItem { name = "value2" });
}

二、生成自闭合XML元素的解决方法

你之前得到<value1 name="value2"> </value1>的原因是:在WriteStartElement后写入了空内容(比如空格或空字符串),XmlWriter会认为元素存在内容,从而生成完整的开始/结束标签。正确做法是仅写入元素和属性,不添加任何文本或子元素内容,直接结束元素。

用XmlWriter实现自闭合元素

var settings = new XmlWriterSettings { Indent = true };
using (var writer = XmlWriter.Create("output.xml", settings))
{
    writer.WriteStartDocument();
    writer.WriteStartElement("root");
    
    // 读取txt文件中的动态值(示例)
    string value2 = File.ReadAllText("values.txt").Trim();
    
    // 生成自闭合元素
    writer.WriteStartElement("value1");
    writer.WriteAttributeString("name", value2);
    // 不要调用WriteString、WriteElementString等写入内容的方法
    writer.WriteEndElement();
    
    writer.WriteEndElement();
    writer.WriteEndDocument();
}

生成的XML片段:

<root>
  <value1 name="读取到的txt值"/>
</root>

用LINQ to XML实现自闭合元素

写法更简洁,直接创建带属性的空元素即可:

string value2 = File.ReadAllText("values.txt").Trim();
var doc = new XDocument(
    new XDeclaration("1.0", "utf-8", "yes"),
    new XElement("root",
        new XElement("value1", new XAttribute("name", value2))
    )
);
doc.Save("output.xml");

输出的XML会自动生成自闭合标签,因为元素没有子内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 02:05:25