Chinaunix首页 | 论坛 | 博客
  • 博客访问: 480452
  • 博文数量: 401
  • 博客积分: 244
  • 博客等级: 入伍新兵
  • 技术积分: 2215
  • 用 户 组: 普通用户
  • 注册时间: 2012-08-04 10:02
文章分类

全部博文(401)

文章存档

2013年(37)

2012年(364)

分类: 系统运维

2012-11-16 12:51:25

读取Xml文档的元素和属性




1001
张三
<***>男
1987-1-12


1002
李四
<***>女
1986-5-12


1003
王二
<***>男
1985-1-15

看看上面的文档,当我们把它加载到内存中之后,各个节点都有自己的类型,首先整个xml都是document文档


它则是XmlDeclaration类型的

下面的StuInfo,student,ID,Name,***,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("

  • 节点类型"+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
    }

    在这里采用的递归的方式完成的对子节点的操作

     

  • 阅读(1468) | 评论(0) | 转发(0) |
    给主人留下些什么吧!~~