博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

xml 总结

Posted on 2012-07-27 12:06  moss_tan_jun  阅读(275)  评论(0编辑  收藏  举报

一. xml是被设计用来传输和存储数据,不用来做任何行为,或表现。

二. xml语法类似html语法,但是有几点不同,我将其列举出来。

         1.xml标签必须是封闭的      <p>....</p>对       <p>....错

         2.xml标签对大小写敏感      <name>....</name> 对       <Name>....</name>错

         3.xml必须正确嵌套            <p><h>.....</h></p>对       <p><h>.....</p></h>错

         4.xml文档必须有根元素      <root><p>...</p><name>...</name></root>

         5.xml的属性值必须加引号   <note date="08/08/2008">.....</note>

         6.如果你把字符 "<" 放在 XML 元素中,会发生错误,这是因为解析器会把它当作新元素的开始。 <message>if salary &lt; 1000 then</message>

         7. 在 XML 中,有 5 个预定义的实体引用:  &lt; < 小于 ;  &gt; > 大于  ;   &amp; & 和号  ;  &apos; ' 单引号   ;  &quot; " 引号  ;

三.xml一些语法规范。

         1.xml中的注释       <!-- This is a comment -->

         2. 在xml中空格会被保留

         3.xml标签命名规则 不能以标点符号开始,不能以空格,xml(XML/Xml/XMl...)任何形式开始。

         4.xml标签中尽量避免属性的使用。



JavaScript读取xml文件。


 

复制代码
<script type="text/javascript">
    if (window.XMLHttpRequest)
      {// code for IE7+, Firefox, Chrome, Opera, Safari
         xmlhttp=new XMLHttpRequest();
      }
    else
      {// code for IE6, IE5
         xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
      }

//      xmlhttp的send是传递参数用的,但是只有在使用post方式提交请求的时候才有用,这是ajax的基础知识
//      如下:
//      xmlhttp.open("post",url,true);  
//      ...
//      xmlhttp.send("data=data&data2=data2");
// 
//      用get的话一般就是:
//      xmlhttp.open("get",url,true);  
//      ...
//      xmlhttp.send(null);   

      xmlhttp.open("get","XMLFile1.xml",false);  //      XMLFile1.xml为要读取的xml文件路径
      xmlhttp.send();          
      xmlDoc=xmlhttp.responseXML;   //xml为返回文档
      
      x=xmlDoc.getElementsByTagName("CD");   //获取节点为CD的xml文档 
      var str="";
      for(i=0;i<x.length;i++)
      {
        str+=x[i].getElementsByTagName("ARTIST")[0].childNodes[0].nodeValue;
      }
    document.write(str);
</script>
复制代码

 JavaScript操作xml文件。


 

复制代码
    <script src="js/loadXMLDoc.js" type="text/javascript"></script>  <!--这个js w3school上面有只有一个方法-->
    <script type="text/javascript">
       if(window.XMLHttpRequest)
       {
          xmlhttp=new XMLHttpRequest();
       }
       else
       {
          xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
       }
       xmlhttp.open("get","XMLFile1.xml",false);
       xmlhttp.send();
       xmlDoc=xmlhttp.responseXML;
       
       x=xmlDoc.getElementsByTagName("CD");
       var str="";
       //改变节点值,属性
       x[0].getElementsByTagName("TITLE")[0].childNodes[0].nodeValue="2b";   //改变节点值
       x[0].getElementsByTagName("TITLE")[0].setAttribute("name","456");    //改变节点属性值
       x[0].getElementsByTagName("ARTIST")[0].getAttributeNode("name").nodeValue="789";  //改变节点属性的值
       
       
       //删除节点值,属性
       var pn=x[0].getElementsByTagName("TITLE").length;  //删除前第一个CD节点中title节点的个数
       y=x[0].getElementsByTagName("TITLE")[1];
       x[0].removeChild(y);  //删除节点
       x[0].parentNode.removeChild(x[0]);  //删除自身节点
       x[0].getElementsByTagName("TITLE")[0].removeAttribute("name");  //删除节点属性
       var Ln=x[0].getElementsByTagName("TITLE").length;  //删除后第一个CD节点中title节点的个数
       
       
       //替换节点
       x[0].getElementsByTagName("TITLE")[0].childNodes[0].replaceData(0,2,"123")  //把节点的前两个字符替换为"123"
       //创建一个 book 元素、一个 title 元素,以及一个 text 节点
       newNode=xmlDoc.createElement("TITLE");
       newTitle=xmlDoc.createElement("NAME");
       newText=xmlDoc.createTextNode("Hello World");
       //向 title 节点添加文本节点
       newTitle.appendChild(newText);
       //向 book 节点添加 title 节点
       newNode.appendChild(newTitle);
       y=x[0].getElementsByTagName("TITLE")[0];
       //用这个新节点替换第一个 book 节点
       x[0].replaceChild(newNode,y);    
       

       //获取节点值,属性
       str=x[0].getElementsByTagName("TITLE")[0].childNodes[0].nodeValue;     //获取节点值
       str+="---------"+x[0].getElementsByTagName("TITLE")[0].getAttribute("name");  //获取属性值
       str+="---------"+x[0].getElementsByTagName("TITLE")[0].getAttributeNode("name").nodeValue;   //获取属性值
       str+="---------"+x[0].getElementsByTagName("ARTIST")[0].getAttribute("name");
       
       function aa(){           
            alert(str+"---删除前: "+pn+"-----删除后: "+Ln);
       }
    </script>
复制代码

c#操作xml文件。


 

复制代码
using System.Xml;

namespace xml初探
{
    public partial class Cshap操作xml : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            XmlDocument xmldoc = new XmlDocument();
            xmldoc.Load(@"G:\xincaifu\asp.net技术点测试\xml初探\books.xml");
            XmlElement theBook = null, theElem = null, root = null;
            root = xmldoc.DocumentElement;


            //创建新建一个CD
            theBook = xmldoc.CreateElement("book");

            theElem = xmldoc.CreateElement("name");
            theElem.InnerText = "新书";
            theBook.AppendChild(theElem);

            theElem = xmldoc.CreateElement("price");
            theElem.InnerText = "20";
            theBook.AppendChild(theElem);

            theElem = xmldoc.CreateElement("memo");
            theElem.InnerText = "新书更好看。";
            theBook.AppendChild(theElem);

            root.AppendChild(theBook);

            Response.Write("---  新建一本书开始 ----");
            Response.Write(root.OuterXml+"</BR>");

            //---  新建一本书完成 ----

            //---  下面对《哈里波特》做一些修改。 ----
            //---  查询找《哈里波特》----
            theBook = (XmlElement)root.SelectSingleNode("/books/book[name='哈里波特']");
            Response.Write("---  查找《哈里波特》 ----");
            Response.Write(theBook.OuterXml);

            //---  此时修改这本书的价格 -----
            theBook.GetElementsByTagName("price").Item(0).InnerText = "15";//getElementsByTagName返回的是NodeList,所以要跟上item(0)。另外,GetElementsByTagName("price")相当于SelectNodes(".//price")。
            Response.Write("---  此时修改这本书的价格 ----");
            Response.Write(theBook.OuterXml);

            //---  另外还想加一个属性id,值为B01 ----
            theBook.SetAttribute("id", "B01");
            Response.Write("---  另外还想加一个属性id,值为B01 ----");
            Response.Write(theBook.OuterXml);
            //---  对《哈里波特》修改完成。 ----

            //---  再将所有价格低于10的书删除  ----
            theBook = (XmlElement)root.SelectSingleNode("/books/book[@id='B02']");
            Response.Write("---  要用id属性删除《三国演义》这本书 ----");
            Response.Write(theBook.OuterXml);
            theBook.ParentNode.RemoveChild(theBook);
            Response.Write("---  删除后的XML ----");
            Response.Write(xmldoc.OuterXml);

            //---  再将所有价格低于10的书删除  ----
            XmlNodeList someBooks = root.SelectNodes("/books/book[price<10]");
            Response.Write("---  再将所有价格低于10的书删除  ---");
            Response.Write("---  符合条件的书有 " + someBooks.Count + "本。  ---");

            for (int i = 0; i < someBooks.Count; i++)
            {
                someBooks.Item(i).ParentNode.RemoveChild(someBooks.Item(i));
            }
            Response.Write("---  删除后的XML ----");
            Response.Write(xmldoc.OuterXml);

            xmldoc.Save(@"G:\xincaifu\asp.net技术点测试\xml初探\XMLFile2.xml");//保存到XMLFile2.xml


        }
    }
}
复制代码

 


C#操作xml增删改查类


复制代码
using System.Xml;

namespace PuTianCheng
{
    /// <summary>
    /// XmlHelper 的摘要说明
    /// </summary>
    public class XmlHelper
    {
        public XmlHelper()
        {
        }

        /// <summary>
        /// 读取数据
        /// </summary>
        /// <param name="path">路径</param>
        /// <param name="node">节点</param>
        /// <param name="attribute">属性名,非空时返回该属性值,否则返回串联值</param>
        /// <returns>string</returns>
        /**************************************************
         * 使用示列:
         * XmlHelper.Read(path, "/Node", "")
         * XmlHelper.Read(path, "/Node/Element[@Attribute='Name']", "Attribute")
         ************************************************/
        public static string Read(string path, string node, string attribute)
        {
            string value = "";
            try
            {
                XmlDocument doc = new XmlDocument();
                doc.Load(path);
                XmlNode xn = doc.SelectSingleNode(node);
                value = (attribute.Equals("") ? xn.InnerText : xn.Attributes[attribute].Value);
            }
            catch { }
            return value;
        }

        /// <summary>
        /// 插入数据
        /// </summary>
        /// <param name="path">路径</param>
        /// <param name="node">节点</param>
        /// <param name="element">元素名,非空时插入新元素,否则在该元素中插入属性</param>
        /// <param name="attribute">属性名,非空时插入该元素属性值,否则插入元素值</param>
        /// <param name="value"></param>
        /// <returns></returns>
        /**************************************************
         * 使用示列:
         * XmlHelper.Insert(path, "/Node", "Element", "", "Value")
         * XmlHelper.Insert(path, "/Node", "Element", "Attribute", "Value")
         * XmlHelper.Insert(path, "/Node", "", "Attribute", "Value")
         ************************************************/
        public static void Insert(string path, string node, string element, string attribute, string value)
        {
            try
            {
                XmlDocument doc = new XmlDocument();
                doc.Load(path);
                XmlNode xn = doc.SelectSingleNode(node);
                if (element.Equals(""))
                {
                    if (!attribute.Equals(""))
                    {
                        XmlElement xe = (XmlElement)xn;
                        xe.SetAttribute(attribute, value);
                    }
                }
                else
                {
                    XmlElement xe = doc.CreateElement(element);
                    if (attribute.Equals(""))
                        xe.InnerText = value;
                    else
                        xe.SetAttribute(attribute, value);
                    xn.AppendChild(xe);
                }
                doc.Save(path);
            }
            catch { }
        }

        /// <summary>
        /// 修改数据
        /// </summary>
        /// <param name="path">路径</param>
        /// <param name="node">节点</param>
        /// <param name="attribute">属性名,非空时修改该节点属性值,否则修改节点值</param>
        /// <param name="value"></param>
        /// <returns></returns>
        /**************************************************
         * 使用示列:
         * XmlHelper.Insert(path, "/Node", "", "Value")
         * XmlHelper.Insert(path, "/Node", "Attribute", "Value")
         ************************************************/
        public static void Update(string path, string node, string attribute, string value)
        {
            try
            {
                XmlDocument doc = new XmlDocument();
                doc.Load(path);
                XmlNode xn = doc.SelectSingleNode(node);
                XmlElement xe = (XmlElement)xn;
                if (attribute.Equals(""))
                    xe.InnerText = value;
                else
                    xe.SetAttribute(attribute, value);
                doc.Save(path);
            }
            catch { }
        }

        /// <summary>
        /// 删除数据
        /// </summary>
        /// <param name="path">路径</param>
        /// <param name="node">节点</param>
        /// <param name="attribute">属性名,非空时删除该节点属性值,否则删除节点值</param>
        /// <param name="value"></param>
        /// <returns></returns>
        /**************************************************
         * 使用示列:
         * XmlHelper.Delete(path, "/Node", "")
         * XmlHelper.Delete(path, "/Node", "Attribute")
         ************************************************/
        public static void Delete(string path, string node, string attribute)
        {
            try
            {
                XmlDocument doc = new XmlDocument();
                doc.Load(path);
                XmlNode xn = doc.SelectSingleNode(node);
                XmlElement xe = (XmlElement)xn;
                if (attribute.Equals(""))
                    xn.ParentNode.RemoveChild(xn);
                else
                    xe.RemoveAttribute(attribute);
                doc.Save(path);
            }
            catch { }
        }
    }
}
复制代码