技术总结:在xml添加使用内容。
说明:下面的代码主要是采用JavaScript脚本,其它语言基本上是一样的。
一、基本的用法
1、创建xml对象:
var xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
2、装载基本的内容,语法说明和根节点root
xmlDoc.loadXML('<?xml version="1.0"?><root/>');
3、创建一个普通(text)节点。
var content = xmlDoc.createElement("content");
4、向节点当中放入内容
content.text = "abcd";
5、获取节点,和节点内容:
var getNode = xmlDoc.documentElement.selectSingleNode("content");
alert(getNode.text);
二、CDATA型的节点:
1、创建元素
var nn = xmlDoc.createElement("abc");
2、创建CDATA:
var mmm = xmlDoc.createCDATASection("<h1>adfce<h1>/n");
3、将CDATA附加到元素
nn.appendChild(mmm);
4、将元素作为节点附加到xml
xmlDoc.documentElement.appendChild(nn);
三、获取节点的几种方式
1、获取单个节点
var getNode = xmlDoc.documentElement.selectSingleNode("content");
alert(getNode.text);
其中xmlDoc.documentElement.selectSingleNode("content")等效于xmlDoc.selectSingleNode("/root/content");
这是因为xmlDoc.documentElement其实就是表示xml的根节点,这里面就是实际上的<root></root>下面这段代码也许能够说明问题:
var getNode = xmlDoc.selectSingleNode("root");
var a = getNode.selectSingleNode("content");
2、通过标签名
这种方面获取的,实际上是一个数组,哪怕实际上在xml中只有一个符合结果的标签名。
var getNode = xmlDoc.getElementsByTagName("content");
alert(getNode[0].text);
例子中,没有循环罗列数组,只显示第一个。
3、通过xpath获取
通上,这也是一个数组。
var getNode = xmlDoc.selectNodes("/root/content");
alert(getNode[0].text);
四、要不要CDATA?
1、普通的方式
经过这种方式斌值 content.text = "<![CDATA[<h1>adfce<h1>]]>";
如果直接斌值,经过在IE6上测试,将会对文本中"<" ">" "&"对三个字符进行编码得到“<”“>”“&”。
content.text = "<![CDATA[<h1>adfce<h1>]]>";
这时候content.xml实际上是“<content><![CDATA[<h1>adfce<h1>]]></content>”
但是,取值的时候,就会将编码还原。
var m = content.text
这时候得到的m仍然是<![CDATA[<h1>adfce<h1>]]>
小结:也就是说,对于html代码、文本来说,存储到xml中,只用普通的text一般情况也没有什么问题。
2、使用CDATA
在前面“二”部分创建了一个Element: abc,
var getNode = xmlDoc.selectNodes("/root/abc");
alert(getNode[0].text);
alert(getNode[0].xml);
运行之后得到的代码:结果是
getNode[0].text ==>> <h1>adfce<h1>
getNode[0].xml ==>> <![CDATA[<h1>adfce<h1>]]>
小结:放在CDATA类型节点中的数据,xml是不会对其进行编码和解码的。
3、总结:
对于文本和html格式的数据,用不用CDATA区别不大。
五、部分测试代码
function testCDATA(){
var xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
xmlDoc.loadXML('<?xml version="1.0"?><root/>');
var content = xmlDoc.createElement("content");
//var n_content = "abc123";
var n_content = "<h1>adfce<h1>";
content.text = "<![CDATA[" + n_content + "]]>";
xmlDoc.documentElement.appendChild(content);
alert(xmlDoc.xml);
var nn = xmlDoc.createElement("abc");
var mmm = xmlDoc.createCDATASection("<h1>adfce<h1>/n");
//alert(mmm.xml);
nn.appendChild(mmm);
xmlDoc.documentElement.appendChild(nn);
//alert(xmlDoc.xml);
//alert(nn.text);
var getNode = xmlDoc.documentElement.selectSingleNode("content");
var getNode = xmlDoc.selectSingleNode("/root/content");
var getNode = xmlDoc.selectSingleNode("root");
var a = getNode.selectSingleNode("content");
//alert(a.text);
var getNode = xmlDoc.getElementsByTagName("content");
var getNode = xmlDoc.selectNodes("/root/content");
alert(getNode[0].text);
alert(getNode[0].xml);
var getNode = xmlDoc.selectNodes("/root/abc");
alert(getNode[0].text);
alert(getNode[0].xml);
}