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