读取Xml文档的元素和属性
<?xml version="1.0" encoding="utf-8" ?>
<StuInfo>
<student>
<ID>1001</ID>
<Name>张三</Name>
<Sex>男</Sex>
<Birthday age="23">1987-1-12</Birthday>
</student>
<student>
<ID>1002</ID>
<Name>李四</Name>
<Sex>女</Sex>
<Birthday age="24">1986-5-12</Birthday>
</student>
<student>
<ID>1003</ID>
<Name>王二</Name>
<Sex>男</Sex>
<Birthday age="25">1985-1-15</Birthday>
</student>
</StuInfo>
看看上面的文档,当我们把它加载到内存中之后,各个节点都有自己的类型,首先整个xml都是document文档
<?xml version="1.0" encoding="utf-8" ?>
它则是XmlDeclaration类型的
下面的StuInfo,student,ID,Name,sex,Birsthday都是Element类型
1001,1002,1003,张三,李四,王五等都是#Text类型的
知道上面的这些之后,那么我们在读取元素的时候就可以通过某个节点的ChildNodes属性获取其子节点的集合,然后根据节点的类型,也就是NodeType属性确定此节点是否是元素节点,或者文档节点等,元素节点的名称可以通过Names属性获取,其所对应的XML数据可以有InnerXml和OutXml,InnerText等来获取
读取属性:
要访问属性的值,必须获取该属性的所属的元素,当节点是元素的时候,可以通过HasAttribute方法查看是否存在任何与此元素相关的属性,然后检索属性,通过XmlNode.Attributes[index]获得相关值
下面看一个实例
protected void Page_Load(object sender, EventArgs e)
{
if(!IsPostBack)
{
XmlDocument doc = new XmlDocument();
string path = Server.MapPath("~/XMLFile.xml");
doc.Load(path);
OperateXml(doc);
}
}
#region 对xml文件进行操作的方法
public void OperateXml(XmlNode doc)
{
//通过XmlDocument把xml文件加载到内存中,然后才能对其操作
Response.Write("<li>节点类型"+doc.NodeType.ToString()+"节点名称"+doc.LocalName);
if (!doc.HasChildNodes)
{
Response.Write(" " + doc.InnerXml);
}
if(doc.NodeType==XmlNodeType.Element)
{
if(doc.Attributes.Count>0)
{
XmlAttribute dd = new XmlAttribute();
for (int i = 0; i < doc.Attributes.Count; i++)
{
Response.Write("属性:" + doc.Attributes[i].LocalName + "=" + doc.Attributes[i].Value);
}
}
if(doc.ChildNodes[0].NodeType==XmlNodeType.Text)
{
Response.Write(" 值为"+doc.InnerText);
}
}
if (doc.HasChildNodes)
{
for (int i = 0; i < doc.ChildNodes.Count; i++)
{
OperateXml(doc.ChildNodes[i]);
}
}
}
#endregion
}
在这里采用的递归的方式完成的对子节点的操作
里面的方法很多,操作的时候灵活使用!