DOM 解析 XML

来源:互联网 发布:js如何实现继承 编辑:程序博客网 时间:2024/06/05 15:28

Java 中的 DOM 接口简介: JDK 中的 DOM API 遵循 W3C DOM 规范,其中 org.w3c.dom 包提供了 Document、DocumentType、Node、NodeList、Element 等接口, 这些接口均是访问 DOM 文档所必须的。我们可以利用这些接口创建、遍历、修改 DOM 文档。

javax.xml.parsers 包中的 DoumentBuilder 和 DocumentBuilderFactory 用于解析 XML 文档生成对应的 DOM Document 对象。

javax.xml.transform.dom 和 javax.xml.transform.stream 包中 DOMSource 类和 StreamSource 类,用于将更新后的 DOM 文档写入 XML 文件。

下面给出一个运用 DOM 解析 XML 的例子:

清单 1. DOM 解析 XML
 import java.io.File;  import java.io.IOException;  import javax.xml.parsers.DocumentBuilder;  import javax.xml.parsers.DocumentBuilderFactory;  import javax.xml.parsers.ParserConfigurationException;  import org.w3c.dom.Document;  import org.w3c.dom.Element;  import org.w3c.dom.Node;  import org.w3c.dom.NodeList;  import org.xml.sax.SAXException;  public class DOMParser {    DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();    //Load and parse XML file into DOM    public Document parse(String filePath) {       Document document = null;       try {          //DOM parser instance          DocumentBuilder builder = builderFactory.newDocumentBuilder();          //parse an XML file into a DOM tree          document = builder.parse(new File(filePath));       } catch (ParserConfigurationException e) {          e.printStackTrace();        } catch (SAXException e) {          e.printStackTrace();       } catch (IOException e) {          e.printStackTrace();       }       return document;    }    public static void main(String[] args) {          DOMParser parser = new DOMParser();          Document document = parser.parse("books.xml");          //get root element          Element rootElement = document.getDocumentElement();          //traverse child elements          NodeList nodes = rootElement.getChildNodes();          for (int i=0; i < nodes.getLength(); i++)          {             Node node = nodes.item(i);             if (node.getNodeType() == Node.ELEMENT_NODE) {                  Element child = (Element) node;                //process child element             }          }          NodeList nodeList = rootElement.getElementsByTagName("book");          if(nodeList != null)          {             for (int i = 0 ; i < nodeList.getLength(); i++)             {                Element element = (Element)nodeList.item(i);                String id = element.getAttribute("id");             }          }    }  }

在上面的例子中,DOMParser 的 Parse() 方法负责解析 XML 文件并生成对应的 DOM Document 对象。其中 DocumentBuilderFactory 用于生成 DOM 文档解析器以便解析 XML 文档。 在获取了 XML 文件对应的 Document 对象之后,我们可以调用一系列的 API 方便的对文档对象模型中的元素进行访问和处理。 需要注意的是调用 Element 对象的 getChildNodes() 方法时将返回其下所有的子节点,其中包括空白节点,因此需要在处理子 Element 之前对节点类型加以判断。

可以看出 DOM 解析 XML 易于开发,只需要通过解析器建立起 XML 对应的 DOM 树型结构后便可以方便的使用 API 对节点进行访问和处理,支持节点的删除和修改等。 但是 DOM 解析 XML 文件时会将整个 XML 文件的内容解析成树型结构存放在内存中,因此不适合用 DOM 解析很大的 XML 文件。


0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 善心汇崩盘了钱怎么办 日本销签忘记了怎么办 手腕的筋拉伤了怎么办 膝盖韧带拉伤怎么办恢复快 手写发票写错了怎么办 发票电话写错了怎么办 京东不可7天退货怎么办 代销有人下单了怎么办 茜子饰品坏了怎么办 唇釉有点干了怎么办 如果微商被骗了怎么办 微信照片过期了怎么办 异地恋没话说了怎么办 请事假公司不批怎么办 请病假领导不批怎么办 农民被当官的整怎么办 领英人脉圈以外怎么办 收到领英的短信怎么办 狗半夜叫个不停怎么办 如果被鬼上身了怎么办 支付宝借钱不还怎么办 鞋子里鞋垫老跑怎么办 鞋垫在鞋里老串怎么办 网贷已经借不到怎么办 骨龄比实际年龄大怎么办 小孩崴脚了肿了怎么办 报到证过期2年多怎么办 报到证过了期限怎么办 报到证超过两年怎么办 报到证过期4年了怎么办 学校没发报到证怎么办 未报到证过期了怎么办 专升本的报到证怎么办 蓝色报到证丢了怎么办 报到证用过了怎么办 大学报到证丢了怎么办 qq好被冻结了怎么办啊 qq突然被冻结了怎么办 扣扣密码被冻结怎么办 蠕动泵不抽水了怎么办 失眠多梦压力大怎么办