ASP.NET XmlDocument类详解
XmlDocument类是.NET框架的DOC解析器。XmlDocument将XML视为树状结构,它装载XML文档,并在内存中构建该文档的树状结构。下面来看下XmlDocument提供了哪些功能。
一、属性:
Attributes获取一个XmlAttributeCollection,它包含该节点的属性。(继承自XmlNode。)
BaseURI 获取当前节点的基URI。(重写XmlNode..::.BaseURI。)
ChildNodes获取节点的所有子节点。(继承自XmlNode。)
DocumentElement获取文档的根XmlElement。
DocumentType获取包含DOCTYPE声明的节点。
FirstChild获取节点的第一个子级。(继承自XmlNode。)
HasChildNodes获取一个值,该值指示节点是否有任何子节点。(继承自XmlNode。)
Implementation 获取当前文档的XmlImplementation对象。
InnerText 获取或设置节点及其所有子节点的串联值。(继承自XmlNode。)
InnerXml获取或设置表示当前节点子级的标记。(重写XmlNode..::.InnerXml。)
IsReadOnly获取一个值,该值指示当前节点是否是只读的。(重写XmlNode..::.IsReadOnly。)
Item已重载。
LastChild获取节点的最后一个子级。(继承自XmlNode。)
LocalName获取节点的本地名称。(重写XmlNode..::.LocalName。)
Name获取节点的限定名。(重写XmlNode..::.Name。)
NamespaceURI获取该节点的命名空间URI。(继承自XmlNode。)
NameTable获取与此实现关联的XmlNameTable。
NextSibling 获取紧接在该节点之后的节点。(继承自XmlNode。)
NodeType获取当前节点的类型。(重写XmlNode..::.NodeType。)
OuterXml 获取表示此节点及其所有子节点的标记。(继承自XmlNode。)
OwnerDocument获取当前节点所属的XmlDocument。(重写XmlNode..::.OwnerDocument。)
ParentNode 已重载。
Prefix 获取或设置该节点的命名空间前缀。(继承自XmlNode。)
PreserveWhitespace 获取或设置一个值,该值指示是否在元素内容中保留空白。
PreviousSibling获取紧接在该节点之前的节点。(继承自XmlNode。)
SchemaInfo返回节点的后架构验证信息集(PSVI)。(重写XmlNode..::.SchemaInfo。)
Schemas获取或设置与此XmlDocument关联的XmlSchemaSet对象。
Value获取或设置节点的值。(继承自XmlNode。)
XmlResolver设置XmlResolver以用于解析外部资源。
二、方法
AppendChild 将指定的节点添加到该节点的子节点列表的末尾。(继承自XmlNode。)
Clone 创建此节点的一个副本。(继承自XmlNode。)
CloneNode 创建此节点的一个副本。(重写XmlNode..::.CloneNode(Boolean)。)
CreateAttribute已重载。创建具有指定名称的XmlAttribute。
CreateCDataSection创建包含指定数据的XmlCDataSection。
CreateComment创建包含指定数据的XmlComment。
CreateDefaultAttribute 创建具有指定前缀、本地名称和命名空间URI的默认属性。
CreateDocumentFragment 创建XmlDocumentFragment。
CreateDocumentType 返回新的XmlDocumentType对象。
CreateElement 已重载。创建XmlElement。
CreateEntityReference 创建具有指定名称的XmlEntityReference。
CreateNavigator已重载。创建一个用于导航此文档的新XPathNavigator对象。
CreateNode 已重载。创建XmlNode。
CreateProcessingInstruction创建一个具有指定名称和数据的XmlProcessingInstruction。
CreateSignificantWhitespace创建一个XmlSignificantWhitespace节点。
CreateTextNode创建具有指定文本的XmlText。
CreateWhitespace创建一个XmlWhitespace节点。
CreateXmlDeclaration创建一个具有指定值的XmlDeclaration节点。
GetElementById获取具有指定ID的XmlElement。
GetElementsByTagName 已重载。返回一个XmlNodeList,它包含与指定名称匹配的所有子代元素的列表。
GetEnumerator提供对XmlNode中节点上“foreach”样式迭代的支持。(继承自XmlNode。)
GetHashCode 用作特定类型的哈希函数。(继承自Object。)
GetNamespaceOfPrefix 查找当前节点范围内离给定的前缀最近的xmlns声明,并返回声明中的命名空间URI。(继承自XmlNode。)
GetPrefixOfNamespace 查找当前节点范围内离给定的命名空间URI最近的xmlns声明,并返回声明中定义的前缀。(继承自XmlNode。)
ImportNode将节点从另一个文档导入到当前文档。
InsertAfter 将指定的节点紧接着插入指定的引用节点之后。(继承自XmlNode。)
InsertBefore将指定的节点紧接着插入指定的引用节点之前。(继承自XmlNode。)
Load 已重载。从Stream、URL、TextReader或XmlReader加载指定的XML数据。
LoadXml 从指定的字符串加载XML文档。
Normalize将此XmlNode下子树完全深度中的所有XmlText节点都转换成“正常”形式,在这种形式中只有标记(即标记、注释、处理指令、CDATA节和实体引用)分隔XmlText节点,也就是说,没有相邻的XmlText节点。(继承自XmlNode。)
PrependChild将指定的节点添加到该节点的子节点列表的开头。(继承自XmlNode。)
ReadNode 根据XmlReader中的信息创建一个XmlNode对象。读取器必须定位在节点或属性上。
RemoveAll 移除当前节点的所有子节点和/或属性。(继承自XmlNode。)
RemoveChild移除指定的子节点。(继承自XmlNode。)
ReplaceChild用newChild节点替换子节点oldChild。(继承自XmlNode。)
Save已重载。将XML文档保存到指定的位置。
SelectNodes 已重载。
SelectSingleNode已重载。
Supports测试DOM实现是否实现特定的功能。(继承自XmlNode。)
Validate已重载。验证XmlDocument是不是Schemas属性中包含的XML架构定义语言(XSD)架构。
WriteContentTo将XmlDocument节点的所有子级保存到指定的XmlWriter中。(重写XmlNode..::.WriteContentTo(XmlWriter)。)
WriteTo将XmlDocument节点保存到指定的XmlWriter。(重写XmlNode..::.WriteTo(XmlWriter)。)
三、事件
NodeChanged当属于该文档的节点的Value已被更改时发生。
NodeChanging当属于该文档的节点的Value将被更改时发生。
NodeInserted 当属于该文档的节点已被插入另一个节点时发生。
NodeInserting当属于该文档的节点将被插入另一个节点时发生。
NodeRemoved当属于该文档的节点已被从其父级移除时发生。
NodeRemoving当属于该文档的节点将被从文档中移除时发生。
助记属性:
PreviousSibling上一个兄弟节点
NextSibling下一个兄弟节点
FirstChild第一个子节点
LastChild最后一个子节点
ChildNodes子节点集合
ParentNode 父节点
代码示例:
xml文档:
<?xmlversion="1.0"encoding="utf-8"?> <Article> <authorage="30">张三</author> <length>12000</length> <price>42</price> </Article>
代码:
staticvoidMain(string[]args) { XmlDocumentdoc=newXmlDocument(); doc.Load(@"C:\Users\Administrator\Desktop\ConsoleApplication1\ConsoleApplication1\Test.xml"); //先获取一个唯一的Article节点,再获取其下的第一个子节点然后再获取该节点下的属性集合 XmlAttributeCollectionxc=doc.SelectSingleNode("Article").FirstChild.Attributes; stringage=xc[0].Value; //不过是一个定制的集合罢了,还是集合那套东西//stringage=xc["age"].Value;支持两种索引访问 Console.WriteLine(age); //输出30
stringbaseuri=doc.SelectSingleNode("Article").FirstChild.BaseURI; Console.WriteLine(baseuri); //输出file:///C:\Users\Administrator\Desktop\ConsoleApplication1\ConsoleApplication1\Test.xml
XmlNodeListlistNode=doc.SelectSingleNode("Article").ChildNodes; //获取Article节点下的所有节点列表 for(inti=0;i<listNode.Count;i++) //XmlNodeList不支持foreach遍历,只能用for { Console.Write(listNode[i].Name+":"+listNode[i].InnerText); //输出author:张三length:12000price:30 Name获取的是限定名,也就是标记名称 }
XmlElementxe=doc.DocumentElement; //获取根节点 Console.WriteLine(xe.Name); //输出Article
//XmlDocumentTypexdt=doc.DocumentType; //获取包含DOCTYPE声明的节点。应该是由DTD限定的节点。 //Console.Write(xdt.Name); //此处报未将对象引用设置到对象的实例,因为找不到有DOCTYPE声明的元素
Console.WriteLine(doc.HasChildNodes); //输出True当前Document是否包含子节点。
//XmlImplementationxi=doc.Implementation; //不懂怎么用 //xi.ToString();
Console.WriteLine(doc.InnerText); //获取当前文档的内容输出张三1200030 Console.WriteLine(doc.InnerXml); //输出整个Xml文件的字符串内容 Console.WriteLine(doc.IsReadOnly); //获取当前文档是否是只读的。输出False XmlNodenode=doc.LastChild; Console.WriteLine(node.InnerText); //输出张三1200030 因为最后一个节点是Article节点,输出Article节点的所有内容 Console.WriteLine(doc.LocalName); //输出#document Console.WriteLine(doc.SelectSingleNode("Article").Name); //输出Article Console.WriteLine(doc.SelectSingleNode("Article").FirstChild.NextSibling.Name); //lengthauthor的下一个兄弟节点是length XmlNodeTypexnt=doc.SelectSingleNode("Article").NodeType; Console.WriteLine(xnt); //输出Element,表明该节点是元素节点 stringstr=doc.SelectSingleNode("Article").OuterXml; //此节点及其所有自己点标记,输出Article节点的所有内容<Article>省略...</Article> Console.WriteLine(str); XmlDocumentx=newXmlDocument(); x.LoadXml(str);
Console.WriteLine(doc.SelectSingleNode("Article").OwnerDocument); //获取该节点所属的XmlDocument XmlNodexn=doc.SelectSingleNode("Article").LastChild.ParentNode; //ParentNode获取直接父节点。 Console.WriteLine(xn.Name);//输出Article
Console.WriteLine(doc.PreserveWhitespace); //是否保留空白 输出False XmlNodexn1=doc.SelectSingleNode("Article").LastChild.PreviousSibling; Console.WriteLine(xn1.Name); //输出length的确是最后一个节点的前一个节点。
Console.ReadKey(); }