XML 文档对象模型----加载和使用XmlDocument (w3c DOM)
如何加载和使用 XmlDocument (W3C DOM)
此示例阐释实现下列规范的类:
- 文档对象模型(核心)级别 1 WWW 联合会 (W3C) 文档对象模型 (DOM) 级别 1 规范。
- W3C 文档对象模型 (DOM) 级别 2 规范中的文档对象模型核心。
DOM 是 XML 文档在内存中(缓存)的树形表示,它支持对文档进行浏览和编辑。
[运行示例] | [查看源代码] |
有许多作为 W3C DOM 的一部分实现的类。其中,XmlNode 类提供操作节点的方法和属性。其他许多 W3C 类是专门化的 XmlNode 类。XmlDocument 类表示 XML 文档,并且有一个 Load 方法,可从文件、流或 XmlReader 中加载文档。下面是这些类的列表。
| 类 | 派生来源 |
|---|---|
| XmlNode | 实现 ICloneable、IEnumerable |
| XmlDocument | XmlNode |
| XmlElement | XmlLinkedNode |
| XmlAttribute | XmlNode |
| XmlCharacterData | XmlLinkedNode |
| XmlText | XmlCharacterData |
| XmlComment | XmlCharacterData |
| XmlCDataSection | XmlCharacterData |
| XmlWhitespace | XmlCharacterData |
| XmlSignificantWhitespace | XmlCharacterData |
| XmlProcessingInstruction | XmlLinkedNode |
| XmlNodeList | 实现 IEnumerable |
| XmlNamedNodeMap | 实现 IEnumerable |
| XmlAttributeCollection | XmlNamedNodeMap |
| XmlDocumentFragment | XmlNode |
| XmlDocumentType | XmlLinkedNode |
| XmlEntityReference | XmlLinkedNode |
| XmlEntity | XmlNode |
| XmlNotation | XmlNode |
| XmlImplementation | Object |
| XmlNodeChangedEventArgs | EventArgs |
下列代码阐释如何从 XmlTextReader 加载 XmlDocument,然后显示该文档的内容。也可从 URL 直接加载 XmlDocument,然后使用 XmlTextReader 读取该 XML 文档。
XmlTextReader reader = null;
try
{
// Load the XML from file
Console.WriteLine ("Reading file {0} ...", args);
reader = new XmlTextReader (args);
reader.WhitespaceHandling = WhitespaceHandling.None;
Console.WriteLine ("File {0} read sucessfully ...", args);
// Create an XmlDocument from the XmlTextReader
XmlDocument myXmlDocument = new XmlDocument();
myXmlDocument.Load (reader);
Console.WriteLine ("XmlDocument loaded with XML data successfully ...");
// Process the supplied XML file
Console.WriteLine ("Processing ...");
Console.WriteLine ();
// Start from the document Element
DisplayTree(myXmlDocument.DocumentElement);
}
catch (Exception e)
{
Console.WriteLine ("Exception: {0}", e.ToString());
}
finally
{
if (reader != null)
reader.Close();
}
|
||
| C# | VB | |
为了定位该文档,DisplayTree 方法使用 XmlNode 的 HasChildNodes 和 FirstChild 属性递归地重复 XmlDocument,以沿着树向下移。NextSibling 属性移到紧靠在当前节点旁的节点,如果没有节点可移动,则返回一个空值。
public void DisplayTree(XmlNode node)
{
if (node != null)
Format (node);
if (node.HasChildNodes)
{
node = node.FirstChild;
while (node != null)
{
DisplayTree(node);
node = node.NextSibling;
}
}
}
|
||
| C# | VB | |
Name 属性给出节点的名称,Value 属性根据节点类型给出它的值。下表显示为给定的节点类型所返回的值。下列代码中所显示的 Format 方法使用 Name和 Value 属性显示当前节点的详细信息。
| 类型 | 值 |
|---|---|
| 属性 | 属性的值 |
| CDATA | CDATA 节的内容 |
| Comment | 注释的内容 |
| Document | 空引用(Visual Basic 中的 Nothing) |
| DocumentFragment | 空引用(Visual Basic 中的 Nothing) |
| DocumentType | 空引用(Visual Basic 中的 Nothing) |
| Element | 空引用(Visual Basic 中的 Nothing) |
| Entity | 空引用(Visual Basic 中的 Nothing) |
| EntityReference | 空引用(Visual Basic 中的 Nothing) |
| Notation | 空引用(Visual Basic 中的 Nothing) |
| ProcessingInstruction | 除目标以外的全部内容 |
| Text | 文本节点的内容 |
| XmlDeclaration | 空引用(Visual Basic 中的 Nothing) |
注意:XmlNode 类还具有 NodeType 属性。有关说明不同节点类型的表,请参阅如何从文件读取 XML。
对于 XmlElement 节点类型,Attributes 属性提供一系列属性作为 XmlNamedNodeMap 类。XmlNameNodeMap 类还实现 IEnumerable,以支持 C# 中的 foreach 语句和 Visual Basic 中的 For Each…Next 语句。
// Format the output
private void Format (XmlNode node)
{
if (!node.HasChildNodes)
{
Console.WriteLine("\t" + node.Name + "<" + node.Value + ">");
}
else
{
Console.Write(node.Name);
if (XmlNodeType.Element == node.NodeType)
{
XmlNamedNodeMap map = node.Attributes;
foreach (XmlNode attrnode in map)
Console.Write(" " + attrnode.Name + "<" + attrnode.Value + "> ");
}
Console.WriteLine();
}
}
|
||
| C# | VB | |
XmlNode 类还具有 NodeType 属性。请参阅如何从文件读取 XML节以获得不同节点类型的表。下面显示的是运行此示例所产生的输出。
Reading file books.xml ... File books.xml read sucessfully ... XmlDocument loaded with XML data successfully ... Processing ... bookstore book genre<autobiography> publicationdate<1981> ISBN<1-861003-11-0> title #text<The Autobiography of Benjamin Franklin> author first-name #text<Benjamin> last-name #text<Franklin> price #text<8.99> book genre<novel> publicationdate<1967> ISBN<0-201-63361-2> title #text<The Confidence Man> author first-name #text<Herman> last-name #text<Melville> price #text<11.99> book genre<philosophy> publicationdate<1991> ISBN<1-861001-57-6> title #text<The Gorgias> author name #text<Plato> price #text<9.99>
摘要
- XmlDocument、XmlNode 和其他类实现 W3C 文档对象模型级别 1 核心以及核心 DOM 级别 2 规范。
- XmlDocument 是 XML 文档在内存中(缓存)的树形表示。
- 有不同的从 XmlNode 专门化的节点类型,使您可以操作 XML 文档。
- 使用 XmlTextReader 和 XmlTextWriter 类,可以获得对 XML 的更快、非缓存和只进的流访问。
浙公网安备 33010602011771号