使用XMLWriter创建XML文件
在介绍如何使用XMLWriter之前首先简要地介绍一下其命名空间System.Xml,System.Xml命名空间中的XML类提供使用XML文档和数据的功能。XML类支持分析和编写XML文档,编辑内存中的XML数据、数据验证及XSLT转换等。
.NET Framework2.0中新增了部分功能,有.NET Framework1.1经验的读者可以迅速地阅读本节以获得相关的知识。.NET Framework2.0版中新增了下列System.Xml功能:
1、新的XML数据处理模型:2.0版包含新的内存中XML数据处理模型。XPathNavigator类已更新,包含编辑功能。可以用于修改存储在XmlDocument类中的数据。
2、新的XSLT处理器:XSLT结构已在.NET Framework2.0版中重新设计。XslCompiledTransform类是新的XSLT处理器,包括许多性能上的改进,比已过时的XslTransform类速度快得多。
3、类型支持:XmlReader、XmlWriter和XPathNavigator类已更新,包含类型支持。这些类上的新方法可以将节点值作为公共语言运行库对象返回。
4、用于创建XmlReader和XmlWriter对象的新模型:在创建XmlReader和XmlWriter对象时,建议使用XmlReader和XmlWriter类上的静态Create方法。使用Create方法可以指定希望XmlReader或XmlWriter对象支持的功能集。
5、架构推断:使用XmlSchemaInference类可以从XML文档的结构推断XML架构定义语言(XSD)架构。
XmlWriter实例使用静态System.Xml.XmlWriter.Create方法创建。XmlWriterSettings类用于指定要在新的XmlWriter对象上启用的功能集。使用XmlWriterSettings类的属性启用或禁用功能。通过将XmlWriterSettings对象传递给Create方法,指定要支持的写入器功能。使用Create方法和XmlWriterSettings类,有以下优点:
1、可以指定要在创建的XmlWriter对象上支持的功能。
2、XmlWriterSettings对象可以重复使用,以创建多个写入器对象。将为每个创建的写入器复制XmlWriterSettings对象并标记为只读。更改XmlWriterSettings实例上的设置不会影响具有相同功能的写入器。因此,可以使用相同的设置创建多个具有相同功能的写入器。也可以修改XmlWriterSettings实例上的设置并创建具有不同功能集的新写入器。
3、可以将功能添加到现有写入器中。Create方法可以接受其他XmlWriter对象。基础XmlWriter对象不必是通过静态Create方法创建的写入器。例如,可以指定用户定义的写入器或要添加附加功能的XmlTextWriter对象。
4、充分利用此版本的XmlWriter类中增加的所有新功能。某些功能只能在通过静态Create方法创建的XmlWriter对象上使用,例如更好的一致性检查及与XML1.0建议的一致性。
如果XmlWriterSettings对象未传递给Create方法,将使用默认的写入器设置。下面列出了XmlWriterSettings类的默认设置:
CheckCharacters (True)
CloseOutput (False)
ConformanceLevel (ConformanceLevel.Document)
Encoding (Encoding.UTF8)
Indent (False)
IndentChars (两个空格)
NewLineChars (\r\n (回车符、换行符))
NewLineHandlin (NewHandling.Replace)
NewLineOnAttributes (False)
OmitXmlDeclaration (False)
XmlWriter类创建XML文件实例:
class program
{
static void Main(string[ ] args)
{
string path=@ "c:\people.xml";
//尝试读取该xml文件
try
{
//创建设置
XmlWriterSettings mySettings=new XmlWriterSettings();
mySettings.Indent=true;
mySettings.IndentChars=(" ");
XmlWriter myWriter=XmlWriter.Create(path,mySettings);//创建XmlWriter的实例
//输入XML数据
myWriter.WriteStartElement("people");//写入一个元素
myWriter.WriteElementString("name","zhang");//写入另一个元素
myWriter.WriteEndElement();//结束写入
myWriter.Flush();
}
catch(Exception e)
{
Console.WriteLine(e.Message);
}
Console.ReadLine();
}
}
会在C盘根目录下产生一个people.xml文件,内容为:
<?xml version="1.0" encoding="utf-8"?>
-<people>
<name>zhang</name>
</people>