什么是XML?

什么是 XML?

XML 指可扩展标记语言(EXtensible Markup Language)。
    XML 是一种很像HTML的标记语言。
    XML 的设计宗旨是传输数据,而不是显示数据。
    XML 标签没有被预定义。您需要自行定义标签。
    XML 被设计为具有自我描述性。
    XML 是 W3C 的推荐标准。

XML 和 HTML 区别

XML 不是 HTML 的替代。
XML 和 HTML 为不同的目的而设计:
    XML 被设计用来传输和存储数据,其焦点是数据的内容。
    HTML 被设计用来显示数据,其焦点是数据的外观。
HTML 旨在显示信息,而 XML 旨在传输信息。

XML 声明

<?xml version="1.0" encoding="utf-8"?>
	version版本号
	encoding 字符集编码

语法规则

所有的 XML 元素都必须有一个关闭标签
XML 标签对大小写敏感
	必须使用相同的大小写来编写打开标签和关闭标签
XML 必须正确嵌套
XML 文档必须有根元素
XML 属性值必须加引号
实体引用
	在 XML 中,一些字符拥有特殊的意义。

如果您把字符 “<” 放在 XML 元素中,会发生错误,这是因为解析器会把它当作新元素的开始。

这样会产生 XML 错误
if salary < 1000 then
< < less than
> > greater than
& & ampersand
’ ’ apostrophe
" " quotation mark
在 XML 中,只有字符 “<” 和 “&” 确实是非法的。大于号是合法的,但是用实体引用来代替它是一个好习惯。
XML 中的注释

在 XML 中,空格会被保留
HTML 会把多个连续的空格字符裁减(合并)为一个:

XML 元素

XML 元素指的是从(且包括)开始标签直到(且包括)结束标签的部分
一个元素可以包含:

其他元素
文本
属性
或混合以上所有...

XML 命名规则

    名称可以包含字母、数字以及其他的字符
    名称不能以数字或者标点符号开始
    名称不能以字母 xml(或者 XML、Xml 等等)开始
    名称不能包含空格
可使用任何名称,没有保留的字词。

属性

XML属性值必须加引号
建议少用属性

实例
<?xml version="1.0" encoding="ISO-8859-1"?>

Tove
Jani
Reminder

Don't forget me this weekend! 子主题 10 //1. 创建ajax 对象 var ajax = new XMLHttpRequest()
        //2. 绑定状态改变事件
        ajax.onreadystatechange = function(){
            if(ajax.status == 200 && ajax.readyState == 4){
              
                console.log(ajax.responseXML.getElementsByTagName('user')[0].childNodes) 
        
            }
        }

        //3. 初始化
        ajax.open('get','1.xml')

        //4.发送请求
        ajax.send()

增删改查

元素节点:
查找:上一篇已介绍。主要是通过方法getElementsByTagName来查找定位。
例子:
//输出所有的titles
var t=xmlDoc.getElementsByTagName("title");
for (i=0;i<t.length;i++)
{
document.write(t.childNodes[0].nodeValue);
document.write("<br />");
}

添加:主要是用createElement创建元素,然后用appendChild附加子节点的形式实现。
例子:
var newNode=xmlDoc.createElement("New Element Name");//创建元素节点
var nodeBook =xmlDoc.getElementsByTagName("book")[0];//找到节点book
nodeBook.appendChild(newNode);//把newNode作为子节点追加到父节点book的子节点后面。也就是说,要追加节点,必须先找到父节点。
另外,还可以通过克隆的方式添加节点。
cloneNode() 方法有一个参数(truefalse)。该参数指示被复制的节点是否包括原节点的所有属性和子节点。
例子:
oldNode=xmlDoc.getElementsByTagName('book')[0];
newNode=oldNode.cloneNode(true);// 克隆复制原节点以及所有属性和子节点
xmlDoc.documentElement.appendChild(newNode);

删除:父节点调用removeChild实现。
例如:
var nodeBook=xmlDoc.getElementsByTagName("book")[0];//找到节点book
xmlDoc.documentElement.removeChild(nodeBook);//删除根节点下面的第一个book节点
注意:删除某个节点,它下面的子节点也会被同时删除。

修改:不允许直接修改元素。若真要修改可以用replaceChild间接完成。
语法是: parentNode. replaceChild(newNode,oldNode)

另外,元素没有nodeValue。若要修改元素内的文本,如修改<title>hello</title>里的hello,可参考下面的操作文本节点。

文本节点:
查找:查找文本节点不能直接用getElementsByTagName,而是先用它找到元素节点,然后再用childNodes[0]或firstChild来定位文本节点(因为它是以元素节点的第一个子节点的形式存在的),接着再用nodeValue即可得到文本内容。
例子:
var nodeTitle=xmlDoc.getElementsByTagName("title")[0];
var titleTextNode=nodeTitle.childNodes[0];//也可以用firstChild
var theTxt=titleTextNode.nodeValue;

添加:类似于元素的添加方式,但文本的添加是通过createTextNode创建的(note:XHTML也可以用innerHTML的方式添加)。
例子:
var edition=xmlDoc.createElement("edition");
var newtext=xmlDoc.createTextNode("this is first");
edition.appendChild(newtext);//在操作XHTML时, 上面这两行可直接用edition.innerHTML=’ this is first’代替;
var nodeBook=xmlDoc.getElementsByTagName("book")[0];
nodeBook.appendChild(edition);

删除:父节点调用removeChild实现。当然也可以用清空nodeValue的方式实现。如textNode.nodeValue=’’。

修改:textNode.nodeValue=’修改成你想要的文本内容’。
另外,文本节点的修改也可以用replaceData()替换文本节点中的数据。
replaceData() 方法有三个参数:
offset - 在何处开始替换字符。Offset 值以 0 开始。
length - 要替换多少字符。,
string - 要插入的字符串。
例子:
xmlDoc.getElementsByTagName("title")[0].childNodes[0].replaceData(0,8,"hello");
//note:其实完全可以用substr或者substring事先处理字符串,再赋值给nodeValue

属性节点:

查找:与元素节点不同,属性节点拥有文本值。获取属性的值的方法,就是获取它的文本值。可以通过使用 getAttribute() 方法或属性节点的 nodeValue 属性来完成这个任务。
例子:
xmlDoc.getElementsByTagName("title")[0].getAttribute("lang");//return “en”
或者
xmlDoc.getElementsByTagName("title")[0].getAttributeNode("lang"). nodeValue; //return “en”

添加:用setAttribute或者setAttributeNode实现。
例子:
xmlDoc.getElementsByTagName('book')[0].setAttribute("edition","this is first");
或者
var newAtt=xmlDoc.createAttribute("edition");
newAtt.nodeValue="this is first first";
xmlDoc.getElementsByTagName("title")[0].setAttributeNode(newAtt);

删除:可用removeAttribute(name)或者removeAttributeNode(node)
例子:
//方式1:removeAttribute
//删除第一个 <book> 元素中的 "category" 属性:
xmlDoc.getElementsByTagName("book")[0].removeAttribute("category");

//方式2:removeAttributeNode
//删除所有 <book> 元素的所有属性
x=xmlDoc.getElementsByTagName("book");
for (i=0;i<x.length;i++)
{
while (x.attributes.length>0)
{
attnode=x.attributes[0];
old_att=x.removeAttributeNode(attnode);
}
}


修改:通过使用 setAttribute() 方法或属性节点的 nodeValue 属性来完成。
例子:
// setAttribute
xmlDoc.getElementsByTagName('book')[0].setAttribute("category","child");
//set nodeValue
var x=xmlDoc.getElementsByTagName("book")[0]
var y=x.getAttributeNode("category");
y.nodeValue="child";
XMLHttpRequest 对象用于在后台与服务器交换数据
	    在不重新加载页面的情况下更新网页
	    在页面已加载后从服务器请求数据
	    在后台向服务器发送数据
	创建
		if (window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}
else
{// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.open("GET","books.xml",false);
xmlhttp.send();
xmlDoc=xmlhttp.responseXML;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值