xml初步学习。
一. 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 <
1000 then</message>
7. 在 XML 中,有 5 个预定义的实体引用: < < 小于 ; > > 大于 ; & & 和号 ; ' ' 单引号 ; " " 引号 ;
三.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:xincaifuasp.net技术点测试xml初探ooks.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:xincaifuasp.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 { } } } }