标签:
1.XML的特点
与html相似,XML是一种显示数据的标记语言,它可以使数据通过网络无障碍地进行传输。同样它也可以显示在用户的浏览器上,在日常的编程中可以发现XML用的也是特别多,比如我们解决方案的配置文件等。XML的主要功能是存储数据,有效的将数据和显示分离,它的重点是有序和合理地存储数据。XML可以自定义标签,还可以是中文,可以按自己的意愿充分表达文件的内容。可以看出XML最大的优势在于对数据的管理,再加上异构系统间的信息互通和更加精确的搜索,这就是我要掌握XML的原因。下面是一段XML代码:
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<网络一班>
<学生 group="man">
<学号>20135808</学号>
<姓名>方一</姓名>
<Age>20</Age>
</学生>
<学生 group="woman">
<学号>20135807</学号>
<姓名>李一</姓名>
<Age>21</Age>
</学生>
</网络一班>
其中第一行最后一个属性standalone为yes表示该文件未引用其他外部XML文件。我们要注意所有的XML元素必须合理包含,所有的XML文档必须有一个根元素,XML区分大小写。在System.Xml中包含了与XML文档读写操作相关的类,主要是XmlReader、XmlTextReader、XmlValidatingReader、XmlWriter等类。
2.简单操作Xml
显然C#肯定是用一个类来代表一个Xml,这个类是XmlDocument,它与XmlReader和XmlWriter一样具有读写功能,而且它还可以随机访问DOM树。下面是我写的一个操作Xml的例子:
public void CreateXml()
{
//创建一个空Xml文档
XmlDocument xmlDocument = new XmlDocument();
//XmlNode就是每一个节点,比如上面例子中的 "网络一班",这里创建的节点是一个Xml的声明
XmlNode xmlNode = xmlDocument.CreateNode(XmlNodeType.XmlDeclaration, "", "");
xmlDocument.AppendChild(xmlNode);
//添加注释
XmlComment xmlComment = xmlDocument.CreateComment("Xml文件的注释内容");
xmlDocument.AppendChild(xmlComment);
//为Xml文档加入元素,并在元素中添加文本
XmlElement xmlElement = xmlDocument.CreateElement("", "学生", "");
//增加一个属性
XmlAttribute attribute = xmlDocument.CreateAttribute("专业");
attribute.Value = "计算机";
xmlElement.Attributes.Append(attribute);
xmlDocument.AppendChild(xmlElement);
//增加一个子元素
XmlElement element2 = xmlDocument.CreateElement("姓名");
XmlText text2 = xmlDocument.CreateTextNode("王五");
element2.AppendChild(text2);
xmlElement.AppendChild(element2);
XmlElement element3 = xmlDocument.CreateElement("性别");
text2=xmlDocument.CreateTextNode("男");
element3.AppendChild(text2);
xmlElement.AppendChild(element3);
xmlDocument.Save(@"C:\Users\fyz\Desktop\MyXml.xml");
}
<?xml version="1.0"?>
<!--Xml文件的注释内容-->
<学生 专业="计算机">
<姓名>王五</姓名>
<性别>男</性别>
</学生>
这样就用代码创建了一个Xml文档,从中可以总结出使用的类的作用:
XmlDocument:表示Xml文档类
XmlNode:表示Xml文档中的单个节点
XmlText:表示元素或者属性的文本内容
XmlComment:表示Xml的注释内容
XmlElement:构成Xml文档的最小单位,表示单个数据比如<姓名>王五</姓名>
XmlAttribute:属性则是节点里的说明,如专业=“计算机”
XmlDeclaration:Xml文档第一行必须要有声明
3.读写Xml
当创建出Xml后,前面也提到有许多读写类去操作Xml。首先来看看XmlWriter类,它包含了写Xml的所有方法和属性,下面是写Xml的代码:
public void WriteXml()
{
XmlTextWriter xmlWriter = new XmlTextWriter(@"C:\Users\fyz\Desktop\MyXml2.xml",null);
//对元素内容进行缩进
xmlWriter.Formatting = Formatting.Indented;
//写入<?xml version="1.0"?>
xmlWriter.WriteStartDocument();
//设置在名称和文本之间带有空格的处理指令,
string str = "type=‘type/xsl‘ href=‘book.xsl‘";
xmlWriter.WriteProcessingInstruction("xml-stylesheet", str);
//增加指定名称和可选属性的DocType声明
xmlWriter.WriteDocType("学生", null, null, "<!ENTITY sex ‘男‘>");
xmlWriter.WriteComment("Xml注释");
//写入元素
xmlWriter.WriteStartElement("学生");
xmlWriter.WriteAttributeString("专业", "计算机");
xmlWriter.WriteAttributeString("爱好", "编程");
xmlWriter.WriteElementString("姓名", "王五");
xmlWriter.WriteStartElement("性别");
//创建对上面实体的引用,显示时为 男
xmlWriter.WriteEntityRef("sex");
xmlWriter.WriteEndElement();
//写入CData信息
xmlWriter.WriteElementString("年龄", "21");
xmlWriter.WriteCData("年龄大了");
//关闭写入
xmlWriter.WriteEndElement();
xmlWriter.WriteEndDocument();
//将缓存中的所有内容刷新到基础流,并同时刷新基础流,也就是操作将写入到Xml
xmlWriter.Flush();
xmlWriter.Close();
}
<?xml version="1.0"?>
<?xml-stylesheet type=‘type/xsl‘ href=‘book.xsl‘?>
<!DOCTYPE 学生[<!ENTITY sex ‘男‘>]>
<!--Xml注释-->
<学生 专业="计算机" 爱好="编程">
<姓名>王五</姓名>
<性别>&sex;</性别>
<年龄>21</年龄><![CDATA[年龄大了]]>
</学生>
下面是使用XmlNodeReader类和XmlTextReader类来读取Xml文档的代码。
public void ReadXml()
{
XmlDocument document = new XmlDocument();
document.Load(@"C:\Users\fyz\Desktop\MyXml.xml");
XmlNodeReader nodeReader = new XmlNodeReader(document);
//每次读取一个节点
while (nodeReader.Read())
{
Console.WriteLine(nodeReader.NodeType+" "+nodeReader.Value);
}
Console.WriteLine("\r\n");
//使用XmlTextReader
XmlTextReader textReader = new XmlTextReader(@"C:\Users\fyz\Desktop\MyXml2.xml");
while (textReader.Read())
{
Console.WriteLine(textReader.NodeType);
textReader.MoveToElement();
Console.WriteLine("Name"+textReader.Name);
Console.WriteLine("Base URI"+textReader.BaseURI);
Console.WriteLine("Local Name" + textReader.LocalName);
Console.WriteLine("value" + textReader.Value);
}
}

标签:
原文地址:http://www.cnblogs.com/fangyz/p/5321592.html