XML概念
Root XML根节点,只能且必须有一个(以上为LinkLibrary)
Element 节点元素(如Link)
Attribute 节点属性(如Cat, Url, Desc)
Content 内容(非空白文本、CDATA、Element、EndElement、EntityReference 或 EndEntity)节点
System.Xml空间
以下类适合快速流式读写XML文件(注:DOM适合随机读写)
XmlReader, XmlWriter,
XmlTextReader, XmlTextWriter
XmlValidatingReader, XmlValidatingWriter 添加了DTD和模式验证,因此提供了数据的有效性验证
XmlNodeReader, XmlNodeWriter 把XmlNode作为其源
节点类型(public enum XmlNodeType)
XmlDeclaration XML 声明(例如,<?xml version="1.0"?>)。
Attribute 属性(例如,id="123")。
CDATA CDATA 节(例如,<![CDATA[my escaped text]]>)。
Comment 注释(例如,<!-- my comment -->)
Document 作为文档树的根的文档对象提供对整个 XML 文档的访问。
DocumentFragment 文档片段。
DocumentType 由以下标记指示的文档类型声明(例如,<!DOCTYPE...>)。
Element 元素(例如,<item>)。
EndElement 末尾元素标记(例如,</item>)。
Entity 实体声明(例如,<!ENTITY...>)。
EndEntity 由于调用 ResolveEntity 而使 XmlReader 到达实体替换的末尾时返回。
EntityReference 实体引用(例如,#)。
None 如果未调用 Read 方法,则由 XmlReader 返回。
Notation 文档类型声明中的表示法(例如,<!NOTATION...>)。
ProcessingInstruction 处理指令(例如,<?pi test?>)。
SignificantWhitespace 混合内容模型中标记间的空白或 xml:space="preserve" 范围内的空白。
Text 节点的文本内容。
Whitespace 标记间的空白。
------------------------------------------------------------------------
使用XmlTextWriter快速写入
------------------------------------------------------------------------
开闭
XmlTextWriter writer = new XmlTextWriter(@"c:/mywriter.xml", null);
writer.Close();
起止XML文档 (<?xml version="1.0"?>
writer.WriteStartDocument();
writer.EndDocument();
声明XML格式
writer.Formatting = Formatting.Indented;
writer.Indentation = 缩进字符数
writer.IndentChar = 缩进字符
writer.QuoteChar = 单引号|双引号
输出注释 (<!-- comment text -->)
writer.WriteComment("comment text");
输出元素 (<Element>ElementVal</Element>)
writer.WriteElementString("Element", "ElementVal");
或者
writer.StartElement("Element");
writer.WriteString("ElementVal");
writer.EndElement();
输出元素属性 (<Element Property="PropertyVal">ElementVal</Element>)
writer.StartElement("Element");
writer.WriteAttributeString("Property", "PropertyVal");
writer.WriteString("ElementVal");
writer.EndElement();
输出CDATA (<!CDATA>....</CDATA>
WriteCData("....")
输出字符缓冲区文本
WriteChars(char[], startPos, length)
已知有一个XML文件(bookstore.xml)如下:
<?xml version="1.0" encoding="gb2312"?> |
1、往<bookstore>节点中插入一个<book>节点:
XmlDocument xmlDoc=new XmlDocument(); |
//================
结果为:
<?xml version="1.0" encoding="gb2312"?> |
2、修改节点:将genre属性值为“李赞红“的节点的genre值改为“update李赞红”,将该节点的子节点<author>的文本修改为“亚胜”。
XmlNodeList nodeList=xmlDoc.SelectSingleNode("bookstore").ChildNodes;//获取bookstore节点的所有子节点 |
<?xml version="1.0" encoding="gb2312"?> |
XmlNodeList xnl=xmlDoc.SelectSingleNode("bookstore").ChildNodes; |
<?xml version="1.0" encoding="gb2312"?> <bookstore> <book ISBN="2-3631-4"> <title>Oberon's Legacy</title> <author>Corets, Eva</author> <price>5.95</price> </book> <book> </book> </bookstore> |
XmlNode xn=xmlDoc.SelectSingleNode("bookstore"); |
------------------------------------------------------------------------
写例程
------------------------------------------------------------------------
XmlTextWriter writer = new XmlTextWriter (filename, null); //Use indenting for readability. writer.Formatting = Formatting.Indented; //xml声明(Write the XML delcaration. ) writer.WriteStartDocument(); //预处理指示(Write the ProcessingInstruction node.) String PItext="type="text/xsl" href="book.xsl""; writer.WriteProcessingInstruction("xml-stylesheet", PItext); //文档类型(Write the DocumentType node.) writer.WriteDocType("book", null , null, "<!ENTITY h "hardcover">"); //注释(Write a Comment node.) writer.WriteComment("sample XML"); //根元素(Write a root element.) writer.WriteStartElement("book"); //属性值(Write the genre attribute.) writer.WriteAttributeString("genre", "novel"); //属性值(Write the ISBN attribute.) writer.WriteAttributeString("ISBN", "1-8630-014"); //Write the title. writer.WriteElementString("title", "The Handmaid"s Tale"); //Write the style element. writer.WriteStartElement("style"); writer.WriteEntityRef("h"); writer.WriteEndElement(); //文本元素节点(Write the price.) writer.WriteElementString("price", "19.95"); //[CDATA] writer.WriteCData("Prices 15% off!!"); //Write the close tag for the root element. writer.WriteEndElement(); writer.WriteEndDocument(); //Write the XML to file and close the writer. writer.Flush(); writer.Close(); //Load the file into an XmlDocument to ensure well formed XML. XmlDocument doc = new XmlDocument(); //Preserve white space for readability. doc.PreserveWhitespace = true; //Load the file. doc.Load(filename); //Display the XML content to the console. Console.Write(doc.InnerXml);