JAXP解析XML
1准备解析的xml文件parseXML.xml
<?
xml version
=
"
1.0
"
encoding
=
"
UTF-8
"
?>
< states >
< north >
< state > Minnesota </ state >
< state > Iowa </ state >
< state > North Dakota </ state >
</ north >
< south >
< state > Texas </ state >
< state > Oklahoma </ state >
< state > Louisiana </ state >
</ south >
< east >
< state > New York </ state >
< state > North Carolina </ state >
< state > Massachusetts </ state >
</ east >
< west >
< state > California </ state >
< state > Oregon </ state >
< state > Nevada </ state >
</ west >
</ states >
2、解析文件
< states >
< north >
< state > Minnesota </ state >
< state > Iowa </ state >
< state > North Dakota </ state >
</ north >
< south >
< state > Texas </ state >
< state > Oklahoma </ state >
< state > Louisiana </ state >
</ south >
< east >
< state > New York </ state >
< state > North Carolina </ state >
< state > Massachusetts </ state >
</ east >
< west >
< state > California </ state >
< state > Oregon </ state >
< state > Nevada </ state >
</ west >
</ states >
DomToXml.java
package
dom.test;
import java.io. * ;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerConfigurationException;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.w3c.dom.Text;
import org.xml.sax.SAXException;
/**
* @author windfree
*
*/
// JAXP是java API for XML processing,几用于处理xml文档的java语言编程接口。
// JAXP支持DOM、XSLT、SAX等标准
public class DomToXml {
public static DocumentBuilderFactory factory;
public static DocumentBuilder parser;
public static Document document;
public static TransformerFactory transformerFactory;
public static Transformer transform;
public static DOMSource domSource;
public static StreamResult streamResult;
public static void main(String[] args) {
try {
test();
} catch (SAXException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
private static void createNode() {
Element root = document.getDocumentElement();
Element firstNode = document.createElement( " other " );
root.appendChild(firstNode);
Text text = document.createTextNode( " test " );
Element nextNode = document.createElement( " state " );
nextNode.appendChild(text);
firstNode.appendChild(nextNode);
}
public static void test() throws SAXException, IOException{
/* DocumentBuilderFactory的静态方法newInstance创建了一个DocumentBuilderFactory实例,然后调用
newDocumentBuilder()方法创建一个DocumentBuilder对象
用DocumentBuilder的parse()方法就可以来解析xml文档并建立Dom模型。
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); 创建一个xml解析器
Document接口描述了对应于整个xml文档的对应树,提供对文档的访问。
DOM标准模型中并没有定义输出的接口,因而如果需要进行文档输出的话,
就需要用到JAXP的扩展,使用到XmlDocument。这儿有一个较为简便的方法,
就是用强制类型转换,把一个Document类转换成XmlDocument,然后,就可以使用XmlDocument的write()方法了
XmlDocument xdoc = (XmlDocument) document;
xdoc.write (System.out);
*/
// 获取一个xml解析器
factory = DocumentBuilderFactory.newInstance();
try {
// 解析XML文件生成DOM文档的接口类,以便访问DOM
parser = factory.newDocumentBuilder();
document = parser.parse( " parseXML.xml " );
Element element = document.getDocumentElement();
System.out.println(element);
NodeList list = element.getChildNodes();
GetElement(list);//解析子节点
createNode();//向dom中插入节点,并写入xml中
} catch (ParserConfigurationException e) {
e.printStackTrace();
}
// 获得将DOM文档转化为xml的转换器
transformerFactory = TransformerFactory.newInstance();
// 下面调用JAXP的XSTL引擎来实现DOM树中的数据到xml文件的功能,XSTL的引擎输入为DOMSource对象,输出为StreamResult对象。
try {
// Transform相当于一个XSTL引擎,通常我们用它的处理XSL文件,
// 这里我们用它来输出xml文件
transform = transformerFactory.newTransformer();
// 创建一个DOMSource对象,参数为Document对象,该对象表现为转化成别的表达形式的信息容器。
domSource = new DOMSource(document);
// 创建一个File对象,代表DOM Tree所包含的数据的输出介质,这是一个XML文件
// 创建一个StreamResult对象,该对象是将DOM对象文档转换为其他文档的容器,可以是一个xml文件,txt文件。
streamResult = new StreamResult( new File( " test.xml " ));
// 调用transform将DOM文件转换为xml文件
transform.transform(domSource, streamResult);
} catch (TransformerConfigurationException e) {
e.printStackTrace();
} catch (TransformerException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
private static void GetElement(NodeList list) {
Node node;
int i;
String str;
if (list.getLength() == 0 ){
return ;
}
for (i = 0 ;i < list.getLength();i ++ ){
node = list.item(i);
if (node.getNodeType() == 1 ){ // Node类型对象
System.out.println(node.getNodeName());
GetElement(node.getChildNodes());
}
else if (node.getNodeType() == 3 ){ // Text类型对象
str = node.getNodeValue();
if (str.length() > 0 ){
System.out.println(str);
}
}
}
}
}
最近在学习ajax,在服务器解析xml文件,所以开始学JAXP和digester.
import java.io. * ;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerConfigurationException;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.w3c.dom.Text;
import org.xml.sax.SAXException;
/**
* @author windfree
*
*/
// JAXP是java API for XML processing,几用于处理xml文档的java语言编程接口。
// JAXP支持DOM、XSLT、SAX等标准
public class DomToXml {
public static DocumentBuilderFactory factory;
public static DocumentBuilder parser;
public static Document document;
public static TransformerFactory transformerFactory;
public static Transformer transform;
public static DOMSource domSource;
public static StreamResult streamResult;
public static void main(String[] args) {
try {
test();
} catch (SAXException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
private static void createNode() {
Element root = document.getDocumentElement();
Element firstNode = document.createElement( " other " );
root.appendChild(firstNode);
Text text = document.createTextNode( " test " );
Element nextNode = document.createElement( " state " );
nextNode.appendChild(text);
firstNode.appendChild(nextNode);
}
public static void test() throws SAXException, IOException{
/* DocumentBuilderFactory的静态方法newInstance创建了一个DocumentBuilderFactory实例,然后调用
newDocumentBuilder()方法创建一个DocumentBuilder对象
用DocumentBuilder的parse()方法就可以来解析xml文档并建立Dom模型。
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); 创建一个xml解析器
Document接口描述了对应于整个xml文档的对应树,提供对文档的访问。
DOM标准模型中并没有定义输出的接口,因而如果需要进行文档输出的话,
就需要用到JAXP的扩展,使用到XmlDocument。这儿有一个较为简便的方法,
就是用强制类型转换,把一个Document类转换成XmlDocument,然后,就可以使用XmlDocument的write()方法了
XmlDocument xdoc = (XmlDocument) document;
xdoc.write (System.out);
*/
// 获取一个xml解析器
factory = DocumentBuilderFactory.newInstance();
try {
// 解析XML文件生成DOM文档的接口类,以便访问DOM
parser = factory.newDocumentBuilder();
document = parser.parse( " parseXML.xml " );
Element element = document.getDocumentElement();
System.out.println(element);
NodeList list = element.getChildNodes();
GetElement(list);//解析子节点
createNode();//向dom中插入节点,并写入xml中
} catch (ParserConfigurationException e) {
e.printStackTrace();
}
// 获得将DOM文档转化为xml的转换器
transformerFactory = TransformerFactory.newInstance();
// 下面调用JAXP的XSTL引擎来实现DOM树中的数据到xml文件的功能,XSTL的引擎输入为DOMSource对象,输出为StreamResult对象。
try {
// Transform相当于一个XSTL引擎,通常我们用它的处理XSL文件,
// 这里我们用它来输出xml文件
transform = transformerFactory.newTransformer();
// 创建一个DOMSource对象,参数为Document对象,该对象表现为转化成别的表达形式的信息容器。
domSource = new DOMSource(document);
// 创建一个File对象,代表DOM Tree所包含的数据的输出介质,这是一个XML文件
// 创建一个StreamResult对象,该对象是将DOM对象文档转换为其他文档的容器,可以是一个xml文件,txt文件。
streamResult = new StreamResult( new File( " test.xml " ));
// 调用transform将DOM文件转换为xml文件
transform.transform(domSource, streamResult);
} catch (TransformerConfigurationException e) {
e.printStackTrace();
} catch (TransformerException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
private static void GetElement(NodeList list) {
Node node;
int i;
String str;
if (list.getLength() == 0 ){
return ;
}
for (i = 0 ;i < list.getLength();i ++ ){
node = list.item(i);
if (node.getNodeType() == 1 ){ // Node类型对象
System.out.println(node.getNodeName());
GetElement(node.getChildNodes());
}
else if (node.getNodeType() == 3 ){ // Text类型对象
str = node.getNodeValue();
if (str.length() > 0 ){
System.out.println(str);
}
}
}
}
}