现在的位置: 首页 > 综合 > 正文

Dom访问Xml-asp.net入门(九)

2013年10月17日 ⁄ 综合 ⁄ 共 3024字 ⁄ 字号 评论关闭

Dom访问Xml笔记

一.Xml文件格式.

二.概述.

三.几种操作.

31添加...

32 修改...

33 删除...

34 复制到另一xml

35 除全部...

四.补充.

五.Xpath语法.

51 比较常见的...

511 选择所有的该类元素...

512 有条件的选择元素...

513 选择包含有某属性的元素...

514 选择包含有属性的元素...

515 选择属性值为**的元素...

52 以下是我从网上摘抄下来的。...

521 文档一...

522 文档二...


Dom访问Xml笔记

在程序中访问进而操作XML文件一般有两种模型,分别是使用DOM(文档对象模型)和流模型。下面是我的学习笔记,主要是学习怎样用Dom访问Xml。

一.Xml文件格式

以下是用到的xml文件,名为contack.xml(其实是写错了,是contact.xml)

<?xml version="1.0" encoding="utf-8"?>

<xmltt>

  <ContactDetails>

    <Contact>

      <Name>

        <First>luo</First>

        <Last>luo</Last>

      </Name>

      <Note>luoandluo</Note>

    </Contact>

  </ContactDetails>

</xmltt>

 

二.概述

DOM的好处在于它允许编辑和更新XML文档,可以随机访问文档中的数据,可以使用XPath查询,但是,DOM的缺点在于它需要一次性的加载整个文档到内存中,对于大型的文档,这会造成资源问题。流模型很好的解决了这个问题,因为它对XML文件的访问采用的是流的概念,也就是说,任何时候在内存中只有当前节点,但它也有它的不足,它是只读的,仅向前的,不能在文档中执行向后导航操作。(不好意思,都是抄的:),说理解吗,也是有的。

三.几种操作

31添加

string strXmlPath;

strXmlPath = Server.MapPath("Contack.xml");

XmlDocument xDoc = new XmlDocument();

xDoc.Load(strXmlPath);

XmlElement xEle = null;

//首先查找是否已经存在要添加

xEle = (XmlElement)xDoc.SelectSingleNode(string.Format("//Name[First='{0}' and Last='{1}']",FirstName.Text,LastName.Text));

if (xEle!=null)  //已经存在

{

Label3.Text = "already exist";

}

else             //不存在,可以添加

{

XmlDocumentFragment xDocFrag = xDoc.CreateDocumentFragment();

XmlElement xContact = xDoc.CreateElement("Contact");

XmlElement xName = xDoc.CreateElement("Name");

XmlElement xFirst = xDoc.CreateElement("First");

xFirst.InnerText = FirstName.Text;

XmlElement xLast = xDoc.CreateElement("Last");

xLast.InnerText = LastName.Text;

xName.AppendChild(xFirst);

xName.AppendChild(xLast);

XmlElement xNote = xDoc.CreateElement("Note");

xNote.InnerText = FirstName.Text+"and"+LastName.Text;

xContact.AppendChild(xName);

xContact.AppendChild(xNote);

xDocFrag.AppendChild(xContact);

XmlNode xRoot = null;

 

xRoot = xDoc.SelectSingleNode("//ContactDetails");  //ContactDetails

if (xRoot!=null)

{

//xRoot.AppendChild(xDocFrag.FirstChild);// 加在最后

xRoot.PrependChild(xDocFrag.FirstChild);  //加在最前,做为第一个子节点

    //还有InsertBefore,InsertAfter(new,old)

    xDoc.Save(strXmlPath);

Label3.Text = "add sucess";  //

}

else

{

Label3.Text = "add failed";

}

32 修改

string str = Server.MapPath("Contack.xml");

XmlDocument xDoc = new XmlDocument();

xDoc.Load(str);

XmlElement xEle = null;

//查看要修改的元素是否存在

xEle = (XmlElement)xDoc.SelectSingleNode(string.Format("//Name[First='{0}' and Last='{1}']",FirstName.Text,LastName.Text));

if (xEle==null)  //不存在

{

Label5.Text = "no exist";

}

else    //存在

{

//下面是一种方法

    /*xEle.ChildNodes[0].InnerXml = FirstName.Text + "Replace";

    xEle.ChildNodes[1].InnerXml = LastName.Text + "Replace";

  xEle.NextSibling.InnerXml = FirstName.Text + "and" + LastName.Text + "Replace";*/

               

//也可以这样

//true表示递归地克隆指定节点下的子树

    XmlElement xNodeCopy = (XmlElement)xEle.CloneNode(true);//

    xNodeCopy.ChildNodes[0].InnerXml = FirstName.Text + "Replace";

    xNodeCopy.ChildNodes[1].InnerXml = LastName.Text + "Replace";

//xNodeCopy.NextSibling.InnerXml = FirstName.Text + "and" + LastName.Text + "Replace";

    //xNodeCopy.ParentNode.ReplaceChild(xNodeCopy,xEle);  //这样是错误的,因为xNodeCopy只是clone了这个点及子点,并没有父点

xEle.ParentNode.ReplaceChild(xNodeCopy,xEle);

 

}

            xDoc.Save(str);

        }

 

33 删除

string str;

str = Server.MapPath("Contack.xml");

抱歉!评论已关闭.