Java读取xml文件

5 篇文章 0 订阅

 

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 对象。如果 Filenull,则抛出 IllegalArgumentException

参数:
f - 包含要解析的 XML 的文件。
返回:
一个新的 DOM Document 对象。
抛出:
IOException - 如果发生任何 IO 错误。
SAXException - 如果发生任何解析错误。
IllegalArgumentException - 当 fnull
另请参见:
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及更高版本中不存在这个问题。

Java读取XML文件有多种方式,其中比较常用的是DOM和SAX两种方式。 DOM方式: 1. 加载XML文件 ```java DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); DocumentBuilder db = dbf.newDocumentBuilder(); Document document = db.parse(new File("xmlfile.xml")); ``` 2. 获取根节点 ```java Element root = document.getDocumentElement(); ``` 3. 获取子节点 ```java NodeList nodeList = root.getChildNodes(); ``` 4. 遍历节点 ```java for (int i=0; i<nodeList.getLength(); i++) { Node node = nodeList.item(i); if (node.getNodeType() == Node.ELEMENT_NODE) { Element element = (Element) node; // 获取节点内容 String content = element.getTextContent(); // 获取节点属性 String attribute = element.getAttribute("attributeName"); } } ``` SAX方式: 1. 创建SAX解析器 ```java SAXParserFactory factory = SAXParserFactory.newInstance(); SAXParser saxParser = factory.newSAXParser(); ``` 2. 实现处理器类 ```java class MyHandler extends DefaultHandler { @Override public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { // 处理开始标签 } @Override public void endElement(String uri, String localName, String qName) throws SAXException { // 处理结束标签 } @Override public void characters(char[] ch, int start, int length) throws SAXException { // 处理节点内容 } } ``` 3. 解析XML文件 ```java saxParser.parse(new File("xmlfile.xml"), new MyHandler()); ``` 以上是Java读取XML文件的基本方法,具体使用可以根据需求进行调整。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值