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
相关产品推荐
相关产品推荐

