XML总结
时间:2010-10-04 来源:张静静
1.使用XML控件读取XML文件:
(1)DocumentSource和TransformSource属性
Document:该属性表示使用XmlDocument对象来设置XML文档。
DocumentContent:使用字符串来设置XML文档,该属性通常是以声明方式设置,具体方法是在XML控件的<asp:Xml>标记的开始和结束之间放置DocumentSource:该属性使用文件来设置XML文档。
文本。
Transform:使用指定的XslTransform类对象格式化XML文档。
TransformSource:使用指定的XSL转换文件格式化XML文档。
(2)Document和Transform属性
<%@ Import Namespace="System.Xml.Xsl" %>
<%@ Import Namespace="System.Xml" %>
<%@ Page Language="C#" AutoEventWireup="True" %>
<html>
<script runat="server" language=C#>
void Page_Load(Object sender, EventArgs e)
{
//创建XmlDocument对象
XmlDocument doc = new XmlDocument();
//加载指定的XML数据
doc.Load(Server.MapPath("AddressList.xml"));
//创建XslTransform对象
XslTransform trans = new XslTransform();
//加载指定的XSL文件
trans.Load(Server.MapPath("AddressList.xsl"));
myxml.Document = doc;
myxml.Transform = trans;
}
</script>
<body>
<h3>读取XML文档内容如下:</h3>
<form runat="server" ID="Form1">
<asp:Xml id="myxml" runat="server" />
</form>
</body></html>
2.使用XML DOM对象模型
AppendChild():将指定的节点添加到该节点的子节点列表的末尾。
? Clone():创建此节点的一个副本。
? CreateAttribute():创建具有指定名称的XmlAttribute对象。
? CreateComment():创建包含指定数据的XmlComment对象。
? CreateDocumentType():返回新的XmlDocumentType对象。
? CreateElement():创建元素。
? CreateNode():创建指定类型的节点,如创建文档声明等。
? CreateTextNode():创建具有指定文本的XmlText。
? Equals():确定两个Object实例是否相等。
GetElementsByTagName():返回一个XmlNodeList对象,它包含与指定名称匹配的所有子元素的列表。
? GetEnumerator():提供对XmlNode中节点上“for each”样式迭代的支持。
? GetType():获取当前实例的类型。
? InsertAfter():将指定的节点紧接着插入指定的引用节点之后。
? InsertBefore():将指定的节点紧接着插入指定的引用节点之前。
? Load():加载指定的XML数据。注意:Load()方法总是保留重要的空白,PreserveWhitespace属性确定是否保留空白。默认值为false,不保留空白。
? LoadXml():从指定的字符串加载XML文档。
? PrependChild():将指定的节点添加到该节点的子节点列表的开头。
? RemoveAll():移除当前节点的所有子节点或属性。
? RemoveChild():移除指定的子节点。
? ReplaceChild():用新节点替换某个子节点。
? Save():将XML文档保存到指定的位置。
? SelectNodes():选择匹配XPath表达式的节点列表。
? WriteContentTo():将XmlDocument节点的所有子级保存到指定的XmlWriter中。
3.使用XmlDocument类解析XML文档
使用该类对文档进行解析,一般步骤如下:
(1)通过XML文档创建DOM树。
(2)遍历元素(根元素的下级节点),获取该元素的属性、字符数据和所有子节点等。
(3)遍历子节点,获取元素的属性和字符数据,如果该节点还有子节点,获取所有子节点,然后重复第三步,直到遍历完该文档的所有节点为止。
void Page_Load(Object sender, EventArgs e)
{
string str="";
//创建XmlDocument对象
XmlDocument doc = new XmlDocument();
//加载指定的XML数据
doc.Load(Server.MapPath("AddressList.xml"));
//遍历friend元素
XmlNodeList list=doc.GetElementsByTagName("friend");
for(int i=0;i<list.Count;i++)
{
XmlNode node=list.Item(i);
//获取friend元素的属性
XmlNode attr=node.Attributes.Item(0);
str+=attr.Name+"="+attr.FirstChild.InnerText+"</br>";
//遍历friend元素的子元素
XmlNodeList l=node.ChildNodes;
for(int j=0;j<l.Count;j++)
{
XmlNode n=l.Item(j);
//获取元素标记和字符数据
str+=n.Name+":"+n.FirstChild.InnerText+"</br>";
}
str+="</p>";
}
Label1.Text=str;
}
有上述例子可以看出:在遍历一个节点时先获取该节点的属性在获取该节点下的子节点。
4.使用XmlDocument类创建XML文档
使用XmlDocument类创建xml文档有两种方法;
(1)使用LoadXml(string xml)方法和Save(string fileName)方法,即将文档中的内容以字符串的形式作为LoadXml(string xml)方法的参数,从该字符串加载到XML文档,然后调用该类的Save(string fileName)方法将其保存到文件中
<script language="C#" runat="server">
private void Page_Load(object sender, System.EventArgs e)
{
XmlDocument doc = new XmlDocument();
string xml="<catalog>"
+"<cd>"
+"<name>Empire Burlesque</name>"
+"<artist>Bob Dylan</artist>"
+"<country>USA</country>"
+"<company>Columbia</company>"
+"<price>10.90</price>"
+"<year>1985</year>"
+"</cd>"
+"<cd>"
+"<name>Hide your heart</name>"
+"<artist>Bonnie Tyler</artist>"
+"<country>UK</country>"
+"<company>CBS Records</company>"
+"<price>9.90</price>"
+"<year>1988</year>"
+"</cd>"
+"<cd>"
+"<name>Greatest Hits</name>"
+"<artist>Dolly Parton</artist>"
+"<country>USA</country>"
+"<company>RCA</company>"
+"<price>9.90</price>"
+"<year>1982</year>"
+"</cd>"
+"</catalog>";
//从指定的字符串加载XML文档
doc.LoadXml(xml);
//保存文档
doc.Save("D://cd.xml");
Label1.Text="创建成功";
myXml.DocumentSource="D://cd.xml";
}
</script>
(2)按照XML的结构一步一步的构建XML文档。首先创建一个空的XML文档,即创建该类的对象;然后在该XML的文档的最头部加入XML的声明段落,通过该类中的CreateNode()方法创建;最后是为XML文档加入元素和属性等。
<script language="C#" runat="server">
private void Page_Load(object sender, System.EventArgs e)
{
XmlDocument doc = new XmlDocument();
//加入XML的声明
XmlNode declare = doc.CreateNode(XmlNodeType.XmlDeclaration,"","");
doc.AppendChild(declare);
//加入一个根元素catalog
XmlElement root=doc.CreateElement("","catalog","");
doc.AppendChild(root);
//加入cd元素
XmlElement elem1=doc.CreateElement("vcd");
root.AppendChild(elem1);
//加入name元素,值为Maggie May
XmlElement node1=doc.CreateElement("name");
XmlText name=doc.CreateTextNode("Maggie May");
node1.AppendChild(name);
elem1.AppendChild(node1);
//加入artist,值为Rod Stewart
XmlElement node2=doc.CreateElement("artist");
XmlText artist=doc.CreateTextNode("Rod Stewart");
node2.AppendChild(artist);
elem1.AppendChild(node2);
//加入company元素,值为Pickwick
XmlElement node3=doc.CreateElement("company");
XmlText company=doc.CreateTextNode("Pickwick");
node3.AppendChild(company);
elem1.AppendChild(node3);
//保存
doc.Save("d:\\vcd.xml");
//重新打开
XmlDocument xmldoc = new XmlDocument();
xmldoc.Load("d:\\vcd.xml");
Label1.Text="创建成功";
myXml.Document=xmldoc;
}
</script>
xmlelement元素继承自xmlnode节点
5.XmlTextReader和XmlTextWriter
(1)XmlTextReader类读取XML文档
XmlTextReader类提供对XML数据流的只读访问。该类位于System.Xml命名空间中
XmlTextReader的一些常用方法:
Close():将ReadState更改为Closed。
? GetAttribute():获取属性的值。
? GetType():获取当前节点的类型。
? IsStartElement():测试当前内容节点是否开始标记。
? MoveToAttribute():移动到指定的属性。
? MoveToElement():移动到包含当前属性节点的元素。
? MoveToNextAttribute ():移动到下一个属性。
? Read():从流中读取下一个节点。
? ReadAttributeValue():将属性值分析为一个或多个Text、EntityReference或EndEntity节点。
? ReadEndElement():检查当前内容节点是否为结束标记并将读取器推进到下一个节点。
? ReadStartElement():检查当前节点是否为元素并将读取器推进到下一个节点。
? ReadString():将元素或文本节点的内容当做字符串读取。
? ResolveEntity():解析EntityReference节点的实体引用。
? Skip():跳过当前节点的子级。
XmlTextReader tr=new XmlTextReader(Server.MapPath("peom.xml"));
while(tr.Read()){
switch(tr.NodeType){
//文档声明
case XmlNodeType.XmlDeclaration:
Response.Write(Server.HtmlEncode("<?"+tr.Name+tr.Value+"?>")+"</br>");
break;
//DOCTYPE
case XmlNodeType.DocumentType:
Response.Write(Server.HtmlEncode("
<!DOCTYPE"+tr.Name+"["+tr.Value+"]")+"</br>");
break;
//元素开始
case XmlNodeType.Element:
Response.Write(Server.HtmlEncode("<"+tr.Name+">")+"</br>");
break;
//字符数据
case XmlNodeType.Text:
Response.Write(tr.Value+"</br>");
break;
//元素结束
case XmlNodeType.EndElement:
Response.Write(Server.HtmlEncode("</"+tr.Name+">")+"</br>");
break;
//解释
case XmlNodeType.Comment:
Response.Write(Server.HtmlEncode("<!--"+tr.Value+"--!>")+"</br>");
break;
case XmlNodeType.Attribute:
Response.Write(Server.HtmlEncode(tr.Name+"="+tr.Value));
break;
}
}
XmlTextReader类读取XML文档的核心代码。
(2)XmlTextWriter类创建XML文档
XmlTextWriter类提供快速、非缓存、只进方法的编写器,该方法生成包含XML数据的流或XML文档文件。该类位于System.Xml命名空间中,使用这个类来创建XML文件,不需要担心输出是否符合XML规范的问题,同时代码也会变得非常简洁。
XmlTextWriter类的一些常用方法:
? WriteComment():写出包含指定文本的注释<!- -...- ->。
? WriteDocType():写出具有指定名称和可选属性的DOCTYPE声明。
? WriteElementString():写出包含字符串值的元素。
? WriteEndAttribute():关闭上一个WriteStartAttribute调用。
? WriteEndDocument():关闭任何打开的元素或属性并将编写器重新设置为Start状态。
? WriteEndElement():关闭一个元素并弹出相应的命名空间范围。
? WriteEntityRef():按&name;写出实体引用。
? WriteProcessingInstruction():写出在名称和文本之间带有空格的处理指令,如下所示:<?name text?>。
? WriteQualifiedName():写出命名空间限定的名称,此方法查找位于给定命名空间范围内的前缀。
? WriteStartAttribute():书写属性的起始内容。
? WriteStartDocument():书写版本为“1.0”的XML声明。
? WriteStartElement():写出指定的开始标记。
? WriteString():书写给定的文本内容。
XmlTextWriter writer = new
XmlTextWriter(Response.OutputStream,Encoding.UTF8);
//文档开始
writer.WriteStartDocument();
//根元素
writer.WriteStartElement("users");
//创建元素infor
writer.WriteStartElement("infor");
//为元素infor添加属性
writer.WriteAttributeString("id", "k001");
writer.WriteElementString("name", "李华");
writer.WriteElementString("age", "25");
writer.WriteElementString("email", "
(1)DocumentSource和TransformSource属性
Document:该属性表示使用XmlDocument对象来设置XML文档。
DocumentContent:使用字符串来设置XML文档,该属性通常是以声明方式设置,具体方法是在XML控件的<asp:Xml>标记的开始和结束之间放置DocumentSource:该属性使用文件来设置XML文档。
文本。
Transform:使用指定的XslTransform类对象格式化XML文档。
TransformSource:使用指定的XSL转换文件格式化XML文档。
(2)Document和Transform属性
<%@ Import Namespace="System.Xml.Xsl" %>
<%@ Import Namespace="System.Xml" %>
<%@ Page Language="C#" AutoEventWireup="True" %>
<html>
<script runat="server" language=C#>
void Page_Load(Object sender, EventArgs e)
{
//创建XmlDocument对象
XmlDocument doc = new XmlDocument();
//加载指定的XML数据
doc.Load(Server.MapPath("AddressList.xml"));
//创建XslTransform对象
XslTransform trans = new XslTransform();
//加载指定的XSL文件
trans.Load(Server.MapPath("AddressList.xsl"));
myxml.Document = doc;
myxml.Transform = trans;
}
</script>
<body>
<h3>读取XML文档内容如下:</h3>
<form runat="server" ID="Form1">
<asp:Xml id="myxml" runat="server" />
</form>
</body></html>
2.使用XML DOM对象模型
AppendChild():将指定的节点添加到该节点的子节点列表的末尾。
? Clone():创建此节点的一个副本。
? CreateAttribute():创建具有指定名称的XmlAttribute对象。
? CreateComment():创建包含指定数据的XmlComment对象。
? CreateDocumentType():返回新的XmlDocumentType对象。
? CreateElement():创建元素。
? CreateNode():创建指定类型的节点,如创建文档声明等。
? CreateTextNode():创建具有指定文本的XmlText。
? Equals():确定两个Object实例是否相等。
GetElementsByTagName():返回一个XmlNodeList对象,它包含与指定名称匹配的所有子元素的列表。
? GetEnumerator():提供对XmlNode中节点上“for each”样式迭代的支持。
? GetType():获取当前实例的类型。
? InsertAfter():将指定的节点紧接着插入指定的引用节点之后。
? InsertBefore():将指定的节点紧接着插入指定的引用节点之前。
? Load():加载指定的XML数据。注意:Load()方法总是保留重要的空白,PreserveWhitespace属性确定是否保留空白。默认值为false,不保留空白。
? LoadXml():从指定的字符串加载XML文档。
? PrependChild():将指定的节点添加到该节点的子节点列表的开头。
? RemoveAll():移除当前节点的所有子节点或属性。
? RemoveChild():移除指定的子节点。
? ReplaceChild():用新节点替换某个子节点。
? Save():将XML文档保存到指定的位置。
? SelectNodes():选择匹配XPath表达式的节点列表。
? WriteContentTo():将XmlDocument节点的所有子级保存到指定的XmlWriter中。
3.使用XmlDocument类解析XML文档
使用该类对文档进行解析,一般步骤如下:
(1)通过XML文档创建DOM树。
(2)遍历元素(根元素的下级节点),获取该元素的属性、字符数据和所有子节点等。
(3)遍历子节点,获取元素的属性和字符数据,如果该节点还有子节点,获取所有子节点,然后重复第三步,直到遍历完该文档的所有节点为止。
void Page_Load(Object sender, EventArgs e)
{
string str="";
//创建XmlDocument对象
XmlDocument doc = new XmlDocument();
//加载指定的XML数据
doc.Load(Server.MapPath("AddressList.xml"));
//遍历friend元素
XmlNodeList list=doc.GetElementsByTagName("friend");
for(int i=0;i<list.Count;i++)
{
XmlNode node=list.Item(i);
//获取friend元素的属性
XmlNode attr=node.Attributes.Item(0);
str+=attr.Name+"="+attr.FirstChild.InnerText+"</br>";
//遍历friend元素的子元素
XmlNodeList l=node.ChildNodes;
for(int j=0;j<l.Count;j++)
{
XmlNode n=l.Item(j);
//获取元素标记和字符数据
str+=n.Name+":"+n.FirstChild.InnerText+"</br>";
}
str+="</p>";
}
Label1.Text=str;
}
有上述例子可以看出:在遍历一个节点时先获取该节点的属性在获取该节点下的子节点。
4.使用XmlDocument类创建XML文档
使用XmlDocument类创建xml文档有两种方法;
(1)使用LoadXml(string xml)方法和Save(string fileName)方法,即将文档中的内容以字符串的形式作为LoadXml(string xml)方法的参数,从该字符串加载到XML文档,然后调用该类的Save(string fileName)方法将其保存到文件中
<script language="C#" runat="server">
private void Page_Load(object sender, System.EventArgs e)
{
XmlDocument doc = new XmlDocument();
string xml="<catalog>"
+"<cd>"
+"<name>Empire Burlesque</name>"
+"<artist>Bob Dylan</artist>"
+"<country>USA</country>"
+"<company>Columbia</company>"
+"<price>10.90</price>"
+"<year>1985</year>"
+"</cd>"
+"<cd>"
+"<name>Hide your heart</name>"
+"<artist>Bonnie Tyler</artist>"
+"<country>UK</country>"
+"<company>CBS Records</company>"
+"<price>9.90</price>"
+"<year>1988</year>"
+"</cd>"
+"<cd>"
+"<name>Greatest Hits</name>"
+"<artist>Dolly Parton</artist>"
+"<country>USA</country>"
+"<company>RCA</company>"
+"<price>9.90</price>"
+"<year>1982</year>"
+"</cd>"
+"</catalog>";
//从指定的字符串加载XML文档
doc.LoadXml(xml);
//保存文档
doc.Save("D://cd.xml");
Label1.Text="创建成功";
myXml.DocumentSource="D://cd.xml";
}
</script>
(2)按照XML的结构一步一步的构建XML文档。首先创建一个空的XML文档,即创建该类的对象;然后在该XML的文档的最头部加入XML的声明段落,通过该类中的CreateNode()方法创建;最后是为XML文档加入元素和属性等。
<script language="C#" runat="server">
private void Page_Load(object sender, System.EventArgs e)
{
XmlDocument doc = new XmlDocument();
//加入XML的声明
XmlNode declare = doc.CreateNode(XmlNodeType.XmlDeclaration,"","");
doc.AppendChild(declare);
//加入一个根元素catalog
XmlElement root=doc.CreateElement("","catalog","");
doc.AppendChild(root);
//加入cd元素
XmlElement elem1=doc.CreateElement("vcd");
root.AppendChild(elem1);
//加入name元素,值为Maggie May
XmlElement node1=doc.CreateElement("name");
XmlText name=doc.CreateTextNode("Maggie May");
node1.AppendChild(name);
elem1.AppendChild(node1);
//加入artist,值为Rod Stewart
XmlElement node2=doc.CreateElement("artist");
XmlText artist=doc.CreateTextNode("Rod Stewart");
node2.AppendChild(artist);
elem1.AppendChild(node2);
//加入company元素,值为Pickwick
XmlElement node3=doc.CreateElement("company");
XmlText company=doc.CreateTextNode("Pickwick");
node3.AppendChild(company);
elem1.AppendChild(node3);
//保存
doc.Save("d:\\vcd.xml");
//重新打开
XmlDocument xmldoc = new XmlDocument();
xmldoc.Load("d:\\vcd.xml");
Label1.Text="创建成功";
myXml.Document=xmldoc;
}
</script>
xmlelement元素继承自xmlnode节点
5.XmlTextReader和XmlTextWriter
(1)XmlTextReader类读取XML文档
XmlTextReader类提供对XML数据流的只读访问。该类位于System.Xml命名空间中
XmlTextReader的一些常用方法:
Close():将ReadState更改为Closed。
? GetAttribute():获取属性的值。
? GetType():获取当前节点的类型。
? IsStartElement():测试当前内容节点是否开始标记。
? MoveToAttribute():移动到指定的属性。
? MoveToElement():移动到包含当前属性节点的元素。
? MoveToNextAttribute ():移动到下一个属性。
? Read():从流中读取下一个节点。
? ReadAttributeValue():将属性值分析为一个或多个Text、EntityReference或EndEntity节点。
? ReadEndElement():检查当前内容节点是否为结束标记并将读取器推进到下一个节点。
? ReadStartElement():检查当前节点是否为元素并将读取器推进到下一个节点。
? ReadString():将元素或文本节点的内容当做字符串读取。
? ResolveEntity():解析EntityReference节点的实体引用。
? Skip():跳过当前节点的子级。
XmlTextReader tr=new XmlTextReader(Server.MapPath("peom.xml"));
while(tr.Read()){
switch(tr.NodeType){
//文档声明
case XmlNodeType.XmlDeclaration:
Response.Write(Server.HtmlEncode("<?"+tr.Name+tr.Value+"?>")+"</br>");
break;
//DOCTYPE
case XmlNodeType.DocumentType:
Response.Write(Server.HtmlEncode("
<!DOCTYPE"+tr.Name+"["+tr.Value+"]")+"</br>");
break;
//元素开始
case XmlNodeType.Element:
Response.Write(Server.HtmlEncode("<"+tr.Name+">")+"</br>");
break;
//字符数据
case XmlNodeType.Text:
Response.Write(tr.Value+"</br>");
break;
//元素结束
case XmlNodeType.EndElement:
Response.Write(Server.HtmlEncode("</"+tr.Name+">")+"</br>");
break;
//解释
case XmlNodeType.Comment:
Response.Write(Server.HtmlEncode("<!--"+tr.Value+"--!>")+"</br>");
break;
case XmlNodeType.Attribute:
Response.Write(Server.HtmlEncode(tr.Name+"="+tr.Value));
break;
}
}
XmlTextReader类读取XML文档的核心代码。
(2)XmlTextWriter类创建XML文档
XmlTextWriter类提供快速、非缓存、只进方法的编写器,该方法生成包含XML数据的流或XML文档文件。该类位于System.Xml命名空间中,使用这个类来创建XML文件,不需要担心输出是否符合XML规范的问题,同时代码也会变得非常简洁。
XmlTextWriter类的一些常用方法:
? WriteComment():写出包含指定文本的注释<!- -...- ->。
? WriteDocType():写出具有指定名称和可选属性的DOCTYPE声明。
? WriteElementString():写出包含字符串值的元素。
? WriteEndAttribute():关闭上一个WriteStartAttribute调用。
? WriteEndDocument():关闭任何打开的元素或属性并将编写器重新设置为Start状态。
? WriteEndElement():关闭一个元素并弹出相应的命名空间范围。
? WriteEntityRef():按&name;写出实体引用。
? WriteProcessingInstruction():写出在名称和文本之间带有空格的处理指令,如下所示:<?name text?>。
? WriteQualifiedName():写出命名空间限定的名称,此方法查找位于给定命名空间范围内的前缀。
? WriteStartAttribute():书写属性的起始内容。
? WriteStartDocument():书写版本为“1.0”的XML声明。
? WriteStartElement():写出指定的开始标记。
? WriteString():书写给定的文本内容。
XmlTextWriter writer = new
XmlTextWriter(Response.OutputStream,Encoding.UTF8);
//文档开始
writer.WriteStartDocument();
//根元素
writer.WriteStartElement("users");
//创建元素infor
writer.WriteStartElement("infor");
//为元素infor添加属性
writer.WriteAttributeString("id", "k001");
writer.WriteElementString("name", "李华");
writer.WriteElementString("age", "25");
writer.WriteElementString("email", "
相关阅读 更多 +