DOM(Document Object Model 文档对象模型)定义了访问和操作文档的标准方法。
XML DOM
XML DOM(XML Document Object Model)定义了访问和操作 XML 文档的标准方法。
XML DOM 把 XML 文档作为树结构来查看。
所有元素可以通过 DOM 树来访问。可以修改或删除它们的内容,并创建新的元素。元素,它们的文本,以及它们的属性,都被认为是节点。
在我们的 XML DOM 教程中,您可以学习更多有关 XML DOM 的知识。
HTML DOM
HTML DOM 定义了访问和操作 HTML 文档的标准方法。
所有 HTML 元素可以通过 HTML DOM 来访问。
在我们的 HTML DOM 教程中,您可以学习更多有关 HTML DOM 的知识。.
加载一个 XML 文件 - 跨浏览器实例
下面的实例把 XML 文档("note.xml")解析到 XML DOM 对象中,然后通过 JavaScript 提取一些信息:
实例
< body>
< h1>W3Schools Internal Note</h1>
< div>
< b>To:</b> <span id="to"></span><br />
< b>From:</b> <span id="from"></span><br />
< b>Message:</b> <span id="message"></span>
< /div>
< script>
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","note.xml",false);
xmlhttp.send();
xmlDoc=xmlhttp.responseXML;
document.getElementById("to").innerHTML=
xmlDoc.getElementsByTagName("to")[0].childNodes[0].nodeValue;
document.getElementById("from").innerHTML=
xmlDoc.getElementsByTagName("from")[0].childNodes[0].nodeValue;
document.getElementById("message").innerHTML=
xmlDoc.getElementsByTagName("body")[0].childNodes[0].nodeValue;
< /script>
< /body>
< /html>
尝试一下 »
重要注释!
如需从上面的 XML 文件("note.xml")的 <to> 元素中提取文本 "Tove",语法是:
请注意,即使 XML 文件只包含一个 <to> 元素,您仍然必须指定数组索引 [0]。这是因为 getElementsByTagName() 方法返回一个数组。
加载一个 XML 字符串 - 跨浏览器实例
下面的实例把 XML 字符串解析到 XML DOM 对象中,然后通过 JavaScript 提取一些信息:
实例
< body>
< h1>W3Schools Internal Note</h1>
< div>
< b>To:</b> <span id="to"></span><br />
< b>From:</b> <span id="from"></span><br />
< b>Message:</b> <span id="message"></span>
< /div>
< script>
txt="<note>";
txt=txt+"<to>Tove</to>";
txt=txt+"<from>Jani</from>";
txt=txt+"<heading>Reminder</heading>";
txt=txt+"<body>Don't forget me this weekend!</body>";
txt=txt+"</note>";
if (window.DOMParser)
{
parser=new DOMParser();
xmlDoc=parser.parseFromString(txt,"text/xml");
}
else // Internet Explorer
{
xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
xmlDoc.async=false;
xmlDoc.loadXML(txt);
}
document.getElementById("to").innerHTML=
xmlDoc.getElementsByTagName("to")[0].childNodes[0].nodeValue;
document.getElementById("from").innerHTML=
xmlDoc.getElementsByTagName("from")[0].childNodes[0].nodeValue;
document.getElementById("message").innerHTML=
xmlDoc.getElementsByTagName("body")[0].childNodes[0].nodeValue;
< /script>
< /body>
< /html>
获取元素的值
下面的实例中使用的 XML 文件:books.xml。
下面的实例检索第一个 <title> 元素的文本值:
获取属性的值
下面的实例检索第一个 <title> 元素的 "lang" 属性的文本值:
改变元素的值
下面的实例改变第一个 <title> 元素的文本值:
创建新的属性
XML DOM 的 setAttribute() 方法可用于改变现有的属性值,或创建一个新的属性。
下面的实例创建了一个新的属性(edition="first"),然后把它添加到每一个 <book> 元素中:
实例
for(i=0;i<x.length;i++)
{
x[i].setAttribute("edition","first");
}
尝试一下 »
创建元素
XML DOM 的 createElement() 方法创建一个新的元素节点。
XML DOM 的 createTextNode() 方法创建一个新的文本节点。
XML DOM 的 appendChild() 方法向节点添加子节点(在最后一个子节点之后)。
如需创建带有文本内容的新元素,需要同时创建元一个新的元素节点和一个新的文本节点,然后把他追加到现有的节点。
下面的实例创建了一个新的元素(<edition>),带有如下文本:First,然后把它添加到第一个 <book> 元素:
实例
newtext=xmlDoc.createTextNode("First");
newel.appendChild(newtext);
x=xmlDoc.getElementsByTagName("book");
x[0].appendChild(newel);
尝试一下 »
实例解释
- 创建一个 <edition> 元素
- 创建值为 "First" 的文本节点
- 把这个文本节点追加到新的 <edition> 元素
- 把 <edition> 元素追加到第一个 <book> 元素
删除元素
下面的实例删除第一个 <book> 元素的第一个节点:
注释:上面实例的结果可能会根据所用的浏览器而不同。Firefox 把新行字符当作空的文本节点,而 Internet Explorer 不是这样。您可以在我们的 XML DOM 教程 中阅读到更多有关这个问题以及如何避免它的知识。