一. 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:\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 { } } } }

浙公网安备 33010602011771号