将对象层次结构映射到 XML 数据
2012-07-06 14:44
281 查看
当 XML 文档在内存中时,概念上的表示形式是树。 编程时可使用对象层次结构访问树节点。 下面的示例显示 XML 内容如何成为节点。
当将 XML 读入 XML 文档对象模型 (DOM) 中时,各片段被转换为节点,这些节点保留有关自身的附加元数据,如它们的节点类型和值。 节点类型是节点的对象,确定可执行的操作以及可设置或检索的属性。
如果具有下面的简单 XML:
<book>
<title>The Handmaid's Tale</title>
</book>
输入在内存中表示为具有分配的节点类型属性的下列节点树:
book 和 title 节点树表示形式
![](http://pic002.cnblogs.com/images/2012/421360/2012070614385819.gif)
book 元素成为 XmlElement 对象,下一个元素 title 也成为 XmlElement,而元素内容成为 XmlText 对象。 查看 XmlElement 的方法和属性可以得知,这些方法和属性不同于 XmlText 对象的方法和属性。 因此,知道 XML 标记成为的节点类型至关重要,因为其节点类型确定可以执行的操作。
下面的示例读入 XML 数据并根据节点类型写出不同的文本。 将下面的 XML 数据文件 items.xml 用作输入:
<?xml version="1.0"?>
<!-- This is a sample XML document -->
<!DOCTYPE Items [<!ENTITY number "123">]>
<Items>
<Item>Test with an entity: &number;</Item>
<Item>test with a child element <more/> stuff</Item>
<Item>test with a CDATA section <![CDATA[<456>]]> def</Item>
<Item>Test with a char entity: A</Item>
<!-- Fourteen chars in this element.-->
<Item>1234567890ABCD</Item>
</Items>
下面的代码示例读取 items.xml 文件并显示每个节点类型的信息。
using System;
using System.IO;
using System.Xml;
public class Sample
{
private const String filename = "items.xml";
public static void Main()
{
XmlTextReader reader = null;
try
{
// Load the reader with the data file and ignore
// all white space nodes.
reader = new XmlTextReader(filename);
reader.WhitespaceHandling = WhitespaceHandling.None;
// Parse the file and display each of the nodes.
while (reader.Read())
{
switch (reader.NodeType)
{
case XmlNodeType.Element:
Console.Write("<{0}>", reader.Name);
break;
case XmlNodeType.Text:
Console.Write(reader.Value);
break;
case XmlNodeType.CDATA:
Console.Write("<![CDATA[{0}]]>", reader.Value);
break;
case XmlNodeType.ProcessingInstruction:
Console.Write("<?{0} {1}?>", reader.Name, reader.Value);
break;
case XmlNodeType.Comment:
Console.Write("<!--{0}-->", reader.Value);
break;
case XmlNodeType.XmlDeclaration:
Console.Write("<?xml version='1.0'?>");
break;
case XmlNodeType.Document:
break;
case XmlNodeType.DocumentType:
Console.Write("<!DOCTYPE {0} [{1}]", reader.Name, reader.Value);
break;
case XmlNodeType.EntityReference:
Console.Write(reader.Name);
break;
case XmlNodeType.EndElement:
Console.Write("</{0}>", reader.Name);
break;
}
}
}
finally
{
if (reader != null)
reader.Close();
}
}
} // End class
此示例的输出显示数据到节点类型的映射。
输出
<?xml version='1.0'?><!--This is a sample XML document --><!DOCTYPE Items [<!ENTITY number "123">]<Items><Item>Test with an entity: 123</Item><Item>test with a child element <more> stuff</Item><Item>test with a CDATA section <![CDATA[<456>]]> def</Item><Item>Test with a char entity: A</Item><--Fourteen chars in this element.--><Item>1234567890ABCD</Item></Items>
通过逐行获取输入并使用从代码生成的输出,可以使用下表分析哪个节点测试生成哪些输出行,从而了解哪些 XML 数据成为哪种节点类型。
您必须知道分配的节点类型,因为节点类型控制哪些操作有效,以及可以设置和检索哪些属性。
当将 XML 读入 XML 文档对象模型 (DOM) 中时,各片段被转换为节点,这些节点保留有关自身的附加元数据,如它们的节点类型和值。 节点类型是节点的对象,确定可执行的操作以及可设置或检索的属性。
如果具有下面的简单 XML:
<book>
<title>The Handmaid's Tale</title>
</book>
输入在内存中表示为具有分配的节点类型属性的下列节点树:
book 和 title 节点树表示形式
![](http://pic002.cnblogs.com/images/2012/421360/2012070614385819.gif)
book 元素成为 XmlElement 对象,下一个元素 title 也成为 XmlElement,而元素内容成为 XmlText 对象。 查看 XmlElement 的方法和属性可以得知,这些方法和属性不同于 XmlText 对象的方法和属性。 因此,知道 XML 标记成为的节点类型至关重要,因为其节点类型确定可以执行的操作。
下面的示例读入 XML 数据并根据节点类型写出不同的文本。 将下面的 XML 数据文件 items.xml 用作输入:
<?xml version="1.0"?>
<!-- This is a sample XML document -->
<!DOCTYPE Items [<!ENTITY number "123">]>
<Items>
<Item>Test with an entity: &number;</Item>
<Item>test with a child element <more/> stuff</Item>
<Item>test with a CDATA section <![CDATA[<456>]]> def</Item>
<Item>Test with a char entity: A</Item>
<!-- Fourteen chars in this element.-->
<Item>1234567890ABCD</Item>
</Items>
下面的代码示例读取 items.xml 文件并显示每个节点类型的信息。
using System;
using System.IO;
using System.Xml;
public class Sample
{
private const String filename = "items.xml";
public static void Main()
{
XmlTextReader reader = null;
try
{
// Load the reader with the data file and ignore
// all white space nodes.
reader = new XmlTextReader(filename);
reader.WhitespaceHandling = WhitespaceHandling.None;
// Parse the file and display each of the nodes.
while (reader.Read())
{
switch (reader.NodeType)
{
case XmlNodeType.Element:
Console.Write("<{0}>", reader.Name);
break;
case XmlNodeType.Text:
Console.Write(reader.Value);
break;
case XmlNodeType.CDATA:
Console.Write("<![CDATA[{0}]]>", reader.Value);
break;
case XmlNodeType.ProcessingInstruction:
Console.Write("<?{0} {1}?>", reader.Name, reader.Value);
break;
case XmlNodeType.Comment:
Console.Write("<!--{0}-->", reader.Value);
break;
case XmlNodeType.XmlDeclaration:
Console.Write("<?xml version='1.0'?>");
break;
case XmlNodeType.Document:
break;
case XmlNodeType.DocumentType:
Console.Write("<!DOCTYPE {0} [{1}]", reader.Name, reader.Value);
break;
case XmlNodeType.EntityReference:
Console.Write(reader.Name);
break;
case XmlNodeType.EndElement:
Console.Write("</{0}>", reader.Name);
break;
}
}
}
finally
{
if (reader != null)
reader.Close();
}
}
} // End class
此示例的输出显示数据到节点类型的映射。
输出
<?xml version='1.0'?><!--This is a sample XML document --><!DOCTYPE Items [<!ENTITY number "123">]<Items><Item>Test with an entity: 123</Item><Item>test with a child element <more> stuff</Item><Item>test with a CDATA section <![CDATA[<456>]]> def</Item><Item>Test with a char entity: A</Item><--Fourteen chars in this element.--><Item>1234567890ABCD</Item></Items>
通过逐行获取输入并使用从代码生成的输出,可以使用下表分析哪个节点测试生成哪些输出行,从而了解哪些 XML 数据成为哪种节点类型。
输入 | 输出 | 节点类型测试 |
---|---|---|
<?xml version="1.0"?> | <?xml version='1.0'?> | XmlNodeType.XmlDeclaration |
<!-- This is a sample XML document --> | <!-- This is a sample XML document --> | XmlNodeType.Comment |
<!DOCTYPE Items [<!ENTITY number "123">]> | <!DOCTYPE Items [<!ENTITY number "123">] | XmlNodeType.DocumentType |
<项> | <项> | XmlNodeType.Element |
<Item> | <Item> | XmlNodeType.Element |
与以下实体一起测试: &number;</Item> | 与以下实体一起测试: 123 | XmlNodeType.Text |
</Item> | </Item> | XmlNodeType.EndElement |
<Item> | <Item> | XmNodeType.Element |
与子元素一起测试 | 与子元素一起测试 | XmlNodeType.Text |
<more> | <more> | XmlNodeType.Element |
stuff | stuff | XmlNodeType.Text |
</Item> | </Item> | XmlNodeType.EndElement |
<Item> | <Item> | XmlNodeType.Element |
与 CDATA 节一起测试 | 与 CDATA 节一起测试 | XmlTest.Text |
<![CDATA[<456>]]> | <![CDATA[<456>]]> | XmlTest.CDATA |
def | def | XmlNodeType.Text |
</Item> | </Item> | XmlNodeType.EndElement |
<Item> | <Item> | XmlNodeType.Element |
与字符实体一起测试:A A | 与字符实体一起测试: A | XmlNodeType.Text |
</Item> | </Item> | XmlNodeType.EndElement |
<!-- Fourteen chars in this element.--> | <--Fourteen chars in this element.--> | XmlNodeType.Comment |
<Item> | <Item> | XmlNodeType.Element |
1234567890ABCD | 1234567890ABCD | XmlNodeType.Text |
</Item> | </Item> | XmlNodeType.EndElement |
</Items> | </Items> | XmlNodeType.EndElement |
相关文章推荐
- XML 文档对象模型 (DOM) 层次结构
- 应用 xml 管理层次结构的数据
- 第七章、更高级的索引结构(XML索引、用户定义数据类型、层次数据、空间数据、文件流、表压缩)
- js中数据结构数组Array、映射Map、集合Set、对象、JSON
- 在.net 中 将线性结构数据列表转换为 XML 格式的层次结构
- 数据结构之循环队列(面向对象思想c++实现)
- 重现Redis--数据结构与对象(一)
- xml与java对象映射
- JAXB的应用之二---------Xml与多个对象的映射(聚合或组合)及注意事项
- Flex从后台读取数据前台显示为层次的树形结构
- 使用 Excel 2003 对象模型添加 XML 数据集成 (From MSDN)
- xml主要数据结构
- JavaScript 的对象层次结构
- SDUTOJ 2137--数据结构实验之求二叉树后序遍历和层次遍历
- 问:当前计算机系统一般会采用层次结构存储数据,请介绍下典型计算机存储系统一般分为哪几个层次,为什么采用分层存储数据能有效提高程序的执行效率?
- Android 解析网络数据传输JSON或XML对象
- 《分析服务从入门到精通读书笔记》第一章、数据分析层次结构(2)
- Hibernate关联映射-数据对象三种关系
- PHP数据对象映射模式
- Ajax核心XMLHttpRequest对象、(发送请求、接收)方法和属性介绍、AJAX开发框架、数据格式提要(XML、JSON、HTML)