XML(DOM)(No.20)

来源:互联网 发布:navicat找不到数据库 编辑:程序博客网 时间:2024/04/30 21:29

 

节点;

XML中任何东西都是节点

就比如下面这段代码中:

<?xml version="1.0" encoding="UTF-8"?>

<!--我的第一个xml文档 -->

<!DOCTYPE note [

<!ELEMENT note (to,from,heading,body)>

<!ELEMENT to (#PCDATA)>

<!ELEMENT from (#PCDATA)>

<!ELEMENT heading (#PCDATA)>

<!ELEMENT body (#PCDATA)>

]>

<note>

<to>George</to>

<from>John</from>

<heading>Reminder</heading>

<body><</body>

<emptyElement/>

</note> 

节点都有:<note>、<note>与<to>之间的换行、<to>、George、<from>、John、</from>与<heading>之间的换行、Reminder、</heading>与<body>之间的换行、<body>、<、</body>与<emptyElement>之间的换行、<emptyElement>

DOM:解析book.xml

Book.xml:

<?xml version="1.0" encoding="UTF-8"?>

<书架>

     <书 category="语言" language="cn">

          <书名 name = "XXXXX">javaweb开发</书名>

          <作者>Tom</作者>

          <s售价>78</s售价>

     </书>

     

     <书 category="脚本技术" language="en">

          <书名 name = "XXXXX">javaweb开发</书名>

          <作者>Tom</作者>

          <s售价>78</s售价>

     </书>

</书架>

 

 

package xml.dom;

import java.io.File;

import org.w3c.dom.Node;

import java.io.IOException;

import org.w3c.dom.Document;

import org.w3c.dom.NodeList;

import org.w3c.dom.NamedNodeMap;

import org.xml.sax.SAXException;

import javax.xml.parsers.DocumentBuilder;

import javax.xml.parsers.DocumentBuilderFactory;

import javax.xml.parsers.ParserConfigurationException;

public class MyDomTest {

public static void main(String[] args) {

try {

 /*调用 DocumentBuilderFactory.newInstance() 方法得到创建 DOM 解析器的工厂。**/

// 获取工厂对象

DocumentBuilderFactory factoty =  DocumentBuilderFactory.newInstance();

 

/*调用工厂对象的 newDocumentBuilder方法得到 DOM 解析器对象。**/

// 获取解析器

DocumentBuilder builder = factoty.newDocumentBuilder();

 

/*调用 DOM 解析器对象的 parse() 方法解析 XML 文档,得到代表整个文档的 Document 对象,进行可以利用DOM特性对整个XML文档进行操作了。**/

// 解析指定文档

Document doc = builder.parse(new File("src/book.xml"));

 

/*NodeList 对象代表一个有顺序的节点列表**/

// 顺序访问节点的方式找到书架节点

NodeList nodeList = 

doc.getChildNodes().item(0).getChildNodes();/*childNodes 属性可返回指定节点的子节点的节点列表**/

 System.out.println("当前根节点书架的节点数:"+nodeList.getLength());/*length 属性可返回一个节点列表中的节点数目**/

 

// 随机访问已知元素名称的指定节点

NodeList nodelist = doc.getElementsByTagName("书架");

 

/*Node的对象note代表文档树中的一个节点,它可以是元素节点、属性节点、文本节点,或者也可以是“节点类型”那一节中所介绍的任何一种节点**/

Node node = nodelist.item(0);/*item() 方法可返回节点列表中处于指定索引号的节点**/

listAllNodes(node);

} catch (SAXException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

} catch (ParserConfigurationException e) {

e.printStackTrace();

}

}

// 对指定的节点进行遍历

public static void listAllNodes(Node node) {

System.out.println("节点名:" + node.getNodeName() + "节点值:"/*nodeName 属性可返回节点的名称,根据其类型**/

+ node.getNodeValue());/*nodeValue 属性可设置或返回某节点的值,根据其类型**/

if (node.getNodeType() == Node.ELEMENT_NODE) {/*nodeType 属性可返回节点的节点类型**/

 

// 遍历当前元素节点的属性

if (node.hasAttributes()) {/*hasAttributes() 方法会在某节点用于任何属性时返回 true,否则返回 false**/

NamedNodeMap attrs = node.getAttributes();/*NamedNodeMap 对象表示一个无顺序的节点列表**/

for (int i = 0; i < attrs.getLength(); i++) {

Node attrNode = attrs.item(i);

     System.out.println(attrNode.getNodeName()+

                                attrNode.getNodeValue());

}

}

// 遍历当前元素节点的子结点,利用递归实现

if (node.hasChildNodes()) {/*判断当前节点是否拥有子节点。**/

NodeList nodeList = node.getChildNodes();

for (int i = 0; i < nodeList.getLength(); i++) {

Node childNode = nodeList.item(i);

listAllNodes(childNode);// 递归

}

}

}

}

}

原创粉丝点击