获取元素的值
下面的代码检索第一个 <title> 元素的文本值:
x=xmlDoc.getElementsByTagName("title")[0].childNodes[0];
txt=x.nodeValue;
获取属性的值
下面的代码检索第一个 <title> 元素的 "lang" 属性的文本值:
txt=xmlDoc.getElementsByTagName("title")[0].getAttribute("lang");
改变元素的值
下面的代码改变第一个 <title> 元素的文本值:
x=xmlDoc.getElementsByTagName("title")[0].childNodes[0];
x.nodeValue="Easy Cooking";
改变属性的值
setAttribute() 方法可用于改变已有属性的值,或创建一个新属性。
下面的代码向每个 <book> 元素添加了名为 "edition" 的新属性(值是 "first"):
x=xmlDoc.getElementsByTagName("book");
for(i=0;i<x.length;i++)
{
x[i].setAttribute("edition","first");
}
创建元素
createElement() 方法创建新的元素节点。
createTextNode() 方法创建新的文本节点。
appendChild() 方法向节点添加子节点(在最后一个子节点之后)。
如需创建带有文本内容的新元素,需要同时创建元素节点和文本节点。
下面的代码创建了一个元素 (<edition>),然后把它添加到第一个 <book> 元素中:
newel=xmlDoc.createElement("edition");
newtext=xmlDoc.createTextNode("First");
newel.appendChild(newtext);
x=xmlDoc.getElementsByTagName("book");
x[0].appendChild(newel);
例子解释:
1. 创建 <edition> 元素
2. 创建值为 "First" 的文本节点
3. 把这个文本节点追加到 <edition> 元素
4. 把 <edition> 元素追加到第一个 <book> 元素
删除元素
removeChild() 方法删除指定的节点(或元素)。
下面的代码片段将删除第一个 <book> 元素中的第一个节点:
x=xmlDoc.getElementsByTagName("book")[0];
x.removeChild(x.childNodes[0]);
XML 数据岛实例
把 XML 文档绑定到 HTML 文档中的一个 <xml> 标签。id 属性定义数据岛的标识符,而 src 属性指向 XML 文件:
<html>
<body>
<xml id="cdcat" src="cd_catalog.xml"></xml>
<table border="1" datasrc="#cdcat">
<tr>
<td><span datafld="ARTIST"></span></td>
<td><span datafld="TITLE"></span></td>
</tr>
</table>
</body>
</html>
<table> 标签的 datasrc 属性把 HTML 表格绑定到 XML 数据岛。
<span> 标签允许 datafld 属性引用要显示的 XML 元素。在这个例子中,要引用的是 "ARTIST" 和 "TITLE"。当读取 XML 时,会为每个 <CD> 元素创建相应的表格行。
"saveForm.asp" 文件是一个 ASP 页面,可循环遍表单域,并把它们的值存储在一个 XML 文件中:
<%
dim xmlDoc
dim rootEl,fieldName,fieldValue,attID
dim p,i
'如果有错误发生,不允许程序终止
On Error Resume Next
Set xmlDoc = server.CreateObject("Microsoft.XMLDOM")
xmlDoc.preserveWhiteSpace=true
'创建并向文档添加根元素
Set rootEl = xmlDoc.createElement("customer")
xmlDoc.appendChild rootEl
'循环遍历 Form 集
for i = 1 To Request.Form.Count
'除去表单中的 button 元素
if instr(1,Request.Form.Key(i),"btn_")=0 then
'创建 field 和 value 元素,以及 id 属性
Set fieldName = xmlDoc.createElement("field")
Set fieldValue = xmlDoc.createElement("value")
Set attID = xmlDoc.createAttribute("id")
'把当前表单域的名称设置为 id 属性的值
attID.Text = Request.Form.Key(i)
'把 id 属性添加到 field 元素
fieldName.setAttributeNode attID
'把当前表单域的值设置为 value 元素的值
fieldValue.Text = Request.Form(i)
'将 field 元素作为根元素的子元素进行添加
rootEl.appendChild fieldName
'将 value 元素作为 field 元素的子元素进行添加
fieldName.appendChild fieldValue
end if
next
'添加 XML processing instruction
'并把它加到根元素之前
Set p = xmlDoc.createProcessingInstruction("xml","version='1.0'")
xmlDoc.insertBefore p,xmlDoc.childNodes(0)
'保存 XML 文件
xmlDoc.save "c:\Customer.xml"
'释放所有的对象引用
set xmlDoc=nothing
set rootEl=nothing
set fieldName=nothing
set fieldValue=nothing
set attID=nothing
set p=nothing
'测试是否有错误发生
if err.number<>0 then
response.write("Error: No information saved.")
else
response.write("Your information has been saved.")
end if
%>
注释:如果指定的 XML 文件名已经存在,那个文件会被覆盖!