java中processing,processing java

1.JAXP(java API for XML Processing)

JAXP使得用java开发处理XML数据的应用程序非常容易,JAXP包括语法分析器、标准SAX与DOM,可以选择以事件流或建立对象表示来解析数据。

JAXP提供的类和方法,可以让java应用程序使用DOM解析或转换XML文件。

2.常用的DOM接口

DOM定义了一套标准的接口以便按照程序的设计显示XML文档。当然,DOM不能实现定义的接口,而支持DOM的XML解析器必须实现DOM所定义的接口。

3.加载XML文档文件

(1)首先需要导入相关的套件

import javax.xml.parsers.*;

import org.sax.*;

import org.w3c.dom.*;

import java.io.*;

其中org.sax.*套件是解析错误处理的相关套件,此外因为XML文件属于文本文件,导入文件处     理的套件java.io.*。

(2)在JAXP中,DOM解析器称为DocumentBuilder,可以通过工厂类DocumentBuilderFactory获得        ,而document对象则可以通过类DocumentBuilder获得,使用try catch指令建立解析的错误        处理。在建立DocumentBuilder对象后,可使用parser方法解析加载XML文件,file对象加载        后就可以处理XML文件的节点内容,程序架构如下:

//获得一个XML文件的解析器

DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance();

try{

//解析XML文件生成DOM文档的接口类,以便访问DOM

DocumentBuilder db=dbf.newDocumentBuilder();

document=db.parser(new File("xml文件"));

...

}catch(Exception ef){

ef.printStackTrack();

}

(3)获得接口类document实例后,就可以对DOM的文档树进行访问。如要遍历DOM文档,首先要获得根节点,然后获得根节点的子节点列表。

//获得根节点

Element element=document.getDocumentElement();

//获得根节点的子节点列表

NodeList childs=element.getChildNodes();

package XML操作1004;

import java.io.File;

import javax.xml.parsers.DocumentBuilder;

import javax.xml.parsers.DocumentBuilderFactory;

import org.w3c.dom.Document;

import org.w3c.dom.Node;

import org.w3c.dom.NodeList;

public class code10_1 {

static Document document;

public static void main(String[] args) {

//if(args.length!=1){

//System.out.println("加载XML file");

//return;

//}

DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance();

try{

dbf.setIgnoringElementContentWhitespace(true);

DocumentBuilder db=dbf.newDocumentBuilder();

//读入xml文档

document=db.parse(new File("C:\\Users\\chenshao\\workspace\\java操作数据库\\src\\XML操作1004\\code10_1.xml"));

//遍历xml文档

walkNode(document.getDocumentElement());

}catch(Exception ef){

ef.printStackTrace();

}

}

private static void walkNode(Node anode){

NodeList child=anode.getChildNodes();

printNode(anode);

for(int i=0;i

Node node=child.item(i);

if(node.hasChildNodes()){

walkNode(node);

}else{

printNode(node);

}

}

}

private static void printNode(Node bnode){

System.out.println(bnode.getNodeName()+","+bnode.getNodeValue());

}

}

cheaperget

12345678

notknown@yahoo.com

200508

361021

0592-6888888

xx省xx市银江路108号

dreaninboy

22345678

greatman@yahoo.com

200505

215006

0512-6188888

xx省xx市人民路108号

4.访问XML元素和属性

在DOM接口规范中,有4个基本接口:Document、Node、NodeList、Element。在这4个基本接口中,Document接口是对文档进行操作的入口,它是从Node接口继承过来的。Node接口是其他大多数接口的父类,入Document、Element,Text、Comment等接口都是从Node接口继承错来的。NodeList接口是一个节点的集合,它包含了某个节点中的所有子节点。

1.Document接口

Document接口代表了整个XML文档,因此,它是整个文档树的根,提供了对文档中数据进行 访问和操作的入口。通过Document节点,可以访问到文档中的其他节点。

方法描述:

(1)getDocumentElement(),Document对象使用该方法可获取XML文件的根节点

(2) getElementByTagName(),Document使用标记名获取子节点,取出的节点是一个    NodeList对象。

2.Node接口

在DOM树中,Node接口代表了树中的一个节点

方法描述:

(1)getChildNodes(),获取子节点的NodeList节点对象列表,即子节点数

(2)getNodeName(),返回节点名称

(3)getNodeType(),返回节点类型的代码

(4)getNodeValue(),返回节点的值

(5)getFirstChild(),获取第一个子节点

(6)getNextSibling(),获取此节点的兄弟节点,即同级的下一个节点

(7)getLastChild(),获取最后一个节点

(8)getParentNode(),获取父节点

(9)hasChildNodes(),Node节点对象检查是否拥有子节点,是返回TRUE,否FALSE

3.Element接口

Element接口代表了XML文档中的元素,提供了访问DOM树中元素内容与信息的途径。

方法描述:

(1)getElementByTagName(String),通过标记名称获取元素

(2)getTagName(),获取元素的标记的名称

(3)getAttributes(String),获取元素的属性,是属性对象列表,属于NamedNodeMap

(4)getAttributeNode(String),通过属性的名字得到一个属性类型节点

4.NamedNodeMap属性列表对象

NamedNodeMap对象可以获取元素的属性列表,因为一个元素可以有多个属性。

访问特定的元素和属性,可以使用Document对象的getElementByName方法获取指定的XML元素。如获得password标记的第二个password标记:

//获得password标记的NodeList节点列表

NodeList passwords=Document.getElementByTagName("password");

//item方法指出为第二个password标记

system.out.println("元素名称:"+passwords.item(1).getNodeName());

package XML操作1004;

import java.io.File;

import javax.xml.parsers.DocumentBuilder;

import javax.xml.parsers.DocumentBuilderFactory;

import org.w3c.dom.Document;

import org.w3c.dom.Node;

import org.w3c.dom.NodeList;

public class code10_3 {

static Document document;

public static void main(String[] args) {

DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance();

try{

DocumentBuilder db=dbf.newDocumentBuilder();

//读入xml文档

document=db.parse(new File("C:\\Users\\chenshao\\workspace\\java操作数据库\\src\\XML操作1004\\code10_1.xml"));//文件路径

//获得根元素

Node root=document.getDocumentElement();

//获得根元素的子节点列表

NodeList childs=root.getChildNodes();

getElement(childs);

}catch(Exception ef){

ef.printStackTrace();

}

}

public static void getElement(NodeList childs){

int i=0;

if(childs.getLength()==0){

//该节点没有子节点

System.out.println("该节点没有子节点!");

}

for(i=0;i

//获取第i个子节点

Node node=childs.item(i);

//获取节点的类型,可以是ElementNode,TextNode,DocumentNode等

short nodetype=node.getNodeType();

//ElementNode类型的节点可以包含子节点和属性等

if(nodetype==Node.ELEMENT_NODE){

//得到节点的名称

String name=node.getNodeName();

String attrValue="",attrName="";

System.out.println("这是一个元素,名字是:"+name);

if(node.hasAttributes()){

/*取出一个元素的属性,得到的是一个属性对象列表(NameNodeMap)在此因为文档中只有一个属性,所以只取

* NameNodeMap中的第0个值*/

Node attrNode=node.getAttributes().item(0);

//取出该节点的Name和value,即是一个ElementNode的属性名称和属性值

attrName=attrNode.getNodeName();

attrValue=attrNode.getNodeValue();

System.out.println("this element attr is:"+attrValue+";attrName is:"+attrName);

}

//如果有子节点,递归调用getElement()

if(node.hasChildNodes()){

getElement(node.getChildNodes());

}

}

//Text类型没有子节点,节点名为#text,节点的值为xml文档中元素的值

if(nodetype==Node.TEXT_NODE){

//该节点的name是#text

String txtName=node.getNodeName();

String txtValue=node.getNodeValue();

if(txtValue.trim().length()>0){

System.out.println("txtName:"+txtName+";txtValue:"+txtValue);

}

}

}

}

}

XML文件仍为code10_1.xml

5.使用DOM创建XML文档

1)创建XML文档

可以使用newDocument方法创建XML文档

document=db.newDocument();

2)建立新的节点

使用Document对象的方法建立所需节点对象

方法说明

createElement(String)建立XML元素的节点,参数为标记名称

createAttribute(string)建立属性名称的属性节点,参数是属性名称

createCDATASection(string)建立CDATA块,参数是文字内容

createComment(String)建立注释文字节点,参数为注释文字内容

createTextNode(String)建立文字节点,参数为内容

3)指定插入的位置

在建立好XML元素的对象好,可以使用Node节点对象的方法添加到DOM树中:

appendChild(newNode),新添加一个newNode节点

insertBefore(newNode,befnode),将newNode节点插到befnode节点前

4)新增元素内容

使用 createTextNode方法建立文字节点后,在使用appendChild方法将它添加到元素节点中

5)新增元素的属性

使用setAttribute方法给Element元素对象增加属性

6)删除元素或属性

如果要删除节点可使用Node节点的removeChild方法删除指定的节点,如果要删除属性可以使      用Element元素对象的removeAttribute方法删除

//删除第一customer节点

root.removeChild((Element)root.getElementsByTagName("customer").item(0));

//删除属性

Element node=(Element)root.getFirstChild();

node.removeAttribute("ID");

package XML操作1005;

import javax.xml.parsers.DocumentBuilder;

import javax.xml.parsers.DocumentBuilderFactory;

import org.w3c.dom.Document;

import org.w3c.dom.Element;

import org.w3c.dom.NamedNodeMap;

import org.w3c.dom.Node;

import org.w3c.dom.NodeList;

public class code10_5 {

static Document document;

public static void main(String[] args) throws Exception{

DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance();

DocumentBuilder db=dbf.newDocumentBuilder();

//建立新的Xml文件

document=db.newDocument();

//建立根元素

Element root=(Element)document.createElement("customer");

document.appendChild(root);

//新增子元素customerID

Element newNode=(Element)document.createElement("customerID");

root.appendChild(newNode);

//增加元素的内容

newNode.appendChild(document.createTextNode("ID"));

//增加元素的属性

newNode=(Element) root.getFirstChild();

newNode.setAttribute("ID", "c050013");

//新增子元素username

newNode=document.createElement("username");

root.appendChild(newNode);

//增加元素的内容

newNode.appendChild(document.createTextNode("cheaperget"));

//新增子元素password

newNode=document.createElement("password");

//新增元素插在根元素的最后一个孩子前面

root.insertBefore(newNode, root.getLastChild());

//增加元素的内容

Node text=document.createTextNode("12345678");

//插入内容节点到根节点的第二个孩子节点

Node temp=root.getFirstChild();

temp.getNextSibling().appendChild(text);

//显示XML文件

System.out.println("根元素:"+root.getNodeName());

//获取根元素的所有子节点

NodeList childs=root.getChildNodes();

for(int i=0;i

//显示元素的名字和元素的内容

System.out.println("元素:"+childs.item(i).getNodeName());

System.out.println("/"+childs.item(i).getFirstChild().getNodeValue());

//显示元素的属性

if(childs.item(i).hasAttributes()){

//属性列表

NamedNodeMap atts=childs.item(i).getAttributes();

//使用for循环获取各属性的名称和值

for(int j=0;j

Node att=atts.item(j);

System.out.println("--"+att.getNodeName());

System.out.println("/"+att.getNodeValue());

}

}

}

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值
>