import org.w3c.dom.*;
import javax.xml.parsers.*;
import java.io.*;
public void init(String xmlFile) throws Exception{
DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance(); //
DocumentBuilder db=dbf.newDocumentBuilder(); //
Document doc=db.parse(new File(xmlFile)); //
doc.getDocumentElement().normalize(); //
}
Notes:
1.
javax.xml.parsers
类 DocumentBuilderFactory
java.lang.Object
javax.xml.parsers.DocumentBuilderFactory
public abstract class DocumentBuilderFactoryextends Object
定义工厂 API,使应用程序能够从 XML 文档获取生成 DOM 对象树的解析器。
public static DocumentBuilderFactory newInstance()
-
获取
DocumentBuilderFactory
的新实例。此 static 方法创建一个新的工厂实例。
2.
java.lang.Object
javax.xml.parsers.DocumentBuilder
定义 API, 使其从 XML 文档获取 DOM 文档实例。使用此类,应用程序员可以从 XML 获取一个 Document
。
此类的实例可以从 DocumentBuilderFactory.newDocumentBuilder()
方法获取。获取此类的实例之后,将可以从各种输入源解析 XML。这些输入源有 InputStreams、Files、URL 和 SAX InputSources。
newDocumentBuilder
public abstract DocumentBuilder newDocumentBuilder()
throws ParserConfigurationException
-
使用当前配置的参数创建一个新的
DocumentBuilder
实例。 -
-
返回:
- 新的 DocumentBuilder 实例。 抛出:
-
ParserConfigurationException
- 如果无法创建满足所请求配置的 DocumentBuilder,将抛出该异常。
3.
parse
public Document parse(File f)
throws SAXException,
IOException
-
将给定文件的内容解析为一个 XML 文档,并且返回一个新的 DOM
Document
对象。如果File
为null
,则抛出IllegalArgumentException
。 -
-
参数:
-
f
- 包含要解析的 XML 的文件。
返回:
- 一个新的 DOM Document 对象。 抛出:
-
IOException
- 如果发生任何 IO 错误。 -
SAXException
- 如果发生任何解析错误。 -
IllegalArgumentException
- 当f
为null
时
另请参见:
-
DocumentHandler
-
4.
Document
public interface Documentextends Node
Document 接口表示整个 HTML 或 XML 文档。从概念上讲,它是文档树的根,并提供对文档数据的基本访问。
Element getDocumentElement()
这是一种便捷属性,该属性允许直接访问文档的文档元素的子节点。
getElementsByTagName(String tagname)
按文档顺序返回包含在文档中且具有给定标记名称的所有 Element 的 NodeList。
createTextNode(String data)
创建给定指定字符串的 Text 节点。
5.
normalize()方法
如果在一个包含两个或多个文本节点的父元素上调用normalize()方法,则会将所有文本节点合并成一个节点,结果节点的nodeValue等于将合并前每个文本节点的nodeValue值拼接起来的值。
var element = document.createElement("div");
element.className = "message";
var textNode = document.createTextNode("Hello wordl!");
element.appendChild(textNode);
var anotherTextNode = document.createTextNode("Yippee!");
element.appendChild(anotherTextNode);
document.body.appendChild(element);
alert(element.childNodes.length); //2
element.normalize();
alert(element.childNodes.length); //1
alert(element.firstChild.nodeValue); //"Hello world!Yippee!"
浏览器在解析文档时永远不会创建相邻的文本节点。这种情况只会作为执行DOM操作的结果出现。
在某些情况下,执行normalize()方法会导致IE6崩溃。不过,在IE6后来的补丁中,可能已经修复了这个问题。IE7及更高版本中不存在这个问题。