您的位置:首页 > 编程语言 > Java开发

java 解析/拆分 xml

2012-08-21 16:12 225 查看
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package jcoapp;

import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.XMLWriter;
import java.io.*;
import java.util.Iterator;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.dom4j.*;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.xml.sax.InputSource;

/**
*
* @author luolai
*/
public class XmlDom4J {

LogInfo loginfo = new LogInfo();

public String parseDocument(File inputXml, String node2) {
SAXReader saxReader = new SAXReader();
Document document = null;
try {
document = saxReader.read(inputXml);
} catch (DocumentException ex) {
Logger.getLogger(XmlDom4J.class.getName()).log(Level.SEVERE, null, ex);
}
Element rootElm = document.getRootElement();
String docXmlText = document.asXML();
String rootXmlText = rootElm.asXML();
//System.out.println(rootXmlText);
System.out.println("root:" + rootElm.getName());
loginfo.appendLog("root:" + rootElm.getName());
List list = rootElm.elements();
Element e2 = (Element) list.get(0);
//System.out.println(e2.getName());

Iterator iter = rootElm.elementIterator(e2.getName()); // 获取根节点下的子节点
// 遍历head节点
String title = "";
while (iter.hasNext()) {
Element recordEle = (Element) iter.next();
title = recordEle.elementTextTrim(node2) == null ? "" : recordEle.elementTextTrim(node2); // 拿到子节点的值
System.out.println(node2 + ":" + title);
loginfo.appendLog(node2 + ":" + title);
return title;
}
//System.out.print(getXmlElmentValue(rootXmlText));

return "";
}

public String parseDocument(String inputXmlString, String node2) {
// 创建一个新的字符串
StringReader read = new StringReader(inputXmlString);
// 创建新的输入源SAX解析器将使用InputSource 对象来确定如何读取 XML 输入
InputSource source = new InputSource(read);

SAXReader saxReader = new SAXReader();
Document document = null;
try {
document = saxReader.read(source);
} catch (DocumentException ex) {
Logger.getLogger(XmlDom4J.class.getName()).log(Level.SEVERE, null, ex);
}
Element rootElm = document.getRootElement();
String docXmlText = document.asXML();
String rootXmlText = rootElm.asXML();
//System.out.println(rootXmlText);
System.out.println("root:" + rootElm.getName());
loginfo.appendLog("root:" + rootElm.getName());
List list = rootElm.elements();
Element e2 = (Element) list.get(0);
System.out.println(e2.getName());

Iterator iter = rootElm.elementIterator(e2.getName()); // 获取根节点下的子节点
// 遍历head节点
String title = "";
while (iter.hasNext()) {
Element recordEle = (Element) iter.next();
title = recordEle.elementTextTrim(node2) == null ? "" : recordEle.elementTextTrim(node2); // 拿到子节点的值
if (!title.equals("")) {
System.out.println(node2 + ":" + title);
loginfo.appendLog(node2 + ":" + title);
return title;
}
}
//System.out.print(getXmlElmentValue(rootXmlText));

return "";
}

public String parseDocument(String inputXmlString, String node1,String node2) {
// 创建一个新的字符串
StringReader read = new StringReader(inputXmlString);
// 创建新的输入源SAX解析器将使用InputSource 对象来确定如何读取 XML 输入
InputSource source = new InputSource(read);

SAXReader saxReader = new SAXReader();
Document document = null;
try {
document = saxReader.read(source);
} catch (DocumentException ex) {
Logger.getLogger(XmlDom4J.class.getName()).log(Level.SEVERE, null, ex);
}
Element rootElm = document.getRootElement();
String docXmlText = document.asXML();
String rootXmlText = rootElm.asXML();
//System.out.println(rootXmlText);
System.out.println("root:" + rootElm.getName());
loginfo.appendLog("root:" + rootElm.getName());
List list = rootElm.elements();
Element e2 = (Element) list.get(0);
if (!node1.equalsIgnoreCase(e2.getName())){
return "";
}
System.out.println(e2.getName());

Iterator iter = rootElm.elementIterator(e2.getName()); // 获取根节点下的子节点
// 遍历head节点
String title = "";
while (iter.hasNext()) {
Element recordEle = (Element) iter.next();
title = recordEle.elementTextTrim(node2) == null ? "" : recordEle.elementTextTrim(node2); // 拿到子节点的值
if (!title.equals("")) {
System.out.println(node2 + ":" + title);
loginfo.appendLog(node2 + ":" + title);
return title;
}
}
//System.out.print(getXmlElmentValue(rootXmlText));

return "";
}

public static String getXmlElmentValue(String xml) {
StringBuffer str = new StringBuffer();
try {
org.dom4j.Document doc = DocumentHelper.parseText(xml);
org.dom4j.Element el = doc.getRootElement();
return recGetXmlElementValue(el, str).toString();
} catch (DocumentException e) {
e.printStackTrace();
return null;
}
}

private static StringBuffer recGetXmlElementValue(org.dom4j.Element ele, StringBuffer valueBuff) {
List eleList = ele.elements();
if (eleList.size() == 0) {
valueBuff.append(ele.getName() + ":" + ele.getText().replaceAll("[\n-\r]", "") + "\r");
return valueBuff;
} else {
valueBuff.append("<<[" + ele.getName() + "]>>" + "\r");
for (Iterator<org.dom4j.Element> iter = eleList.iterator(); iter.hasNext();) {
org.dom4j.Element innerEle = iter.next();
recGetXmlElementValue(innerEle, valueBuff);
}
return valueBuff;
}
}

public void generateDocument() {
Document document = DocumentHelper.createDocument();
Element catalogElement = document.addElement("catalog");
catalogElement.addComment("An XML Catalog");
catalogElement.addProcessingInstruction("target", "text");
Element journalElement = catalogElement.addElement("journal");
journalElement.addAttribute("title", "XML Zone");
journalElement.addAttribute("publisher", "IBM developerWorks");
Element articleElement = journalElement.addElement("article");
articleElement.addAttribute("level", "Intermediate");
articleElement.addAttribute("date", "December-2001");
Element titleElement = articleElement.addElement("title");
titleElement.setText("Java configuration with XML Schema");
Element authorElement = articleElement.addElement("author");
Element firstNameElement = authorElement.addElement("firstname");
firstNameElement.setText("Marcello");
Element lastNameElement = authorElement.addElement("lastname");
lastNameElement.setText("Vitaletti");
//document.addDocType("catalog", null, "file://d:/Dtds/catalog.dtd");
try {
XMLWriter output = new XMLWriter(
new FileWriter(new File("d:/catalog.xml")));
output.write(document);
output.close();
} catch (IOException e) {
System.out.println(e.getMessage());
}
}

public void modifyDocument(File inputXml) {
try {
SAXReader saxReader = new SAXReader();
Document document = saxReader.read(inputXml);
List list = document.selectNodes("//article/@level");
Iterator iter = list.iterator();
while (iter.hasNext()) {
Attribute attribute = (Attribute) iter.next();
if (attribute.getValue().equals("Intermediate")) {
attribute.setValue("Introductory");
}
}

list = document.selectNodes("//article/@date");
iter = list.iterator();
while (iter.hasNext()) {
Attribute attribute = (Attribute) iter.next();
if (attribute.getValue().equals("December-2001")) {
attribute.setValue("October-2002");
}
}
list = document.selectNodes("//article");
iter = list.iterator();
while (iter.hasNext()) {
Element element = (Element) iter.next();
Iterator iterator = element.elementIterator("title");
while (iterator.hasNext()) {
Element titleElement = (Element) iterator.next();
if (titleElement.getText().equals(
"Java configuration with XMLSchema")) {
titleElement.setText("Create flexible and extensible XML schema");
}
}
}
list = document.selectNodes("//article/author");
iter = list.iterator();
while (iter.hasNext()) {
Element element = (Element) iter.next();
Iterator iterator = element.elementIterator("firstname");
while (iterator.hasNext()) {
Element firstNameElement = (Element) iterator.next();
if (firstNameElement.getText().equals("Marcello")) {
firstNameElement.setText("Ayesha");
}
}
}
list = document.selectNodes("//article/author");
iter = list.iterator();
while (iter.hasNext()) {
Element element = (Element) iter.next();
Iterator iterator = element.elementIterator("lastname");
while (iterator.hasNext()) {
Element lastNameElement = (Element) iterator.next();
if (lastNameElement.getText().equals("Vitaletti")) {
lastNameElement.setText("Malik");
}
}
}
XMLWriter output = new XMLWriter(
new FileWriter(new File("c:/catalog/catalog-modified.xml")));
output.write(document);
output.close();
} catch (DocumentException e) {
System.out.println(e.getMessage());
} catch (IOException e) {
System.out.println(e.getMessage());
}
}

public boolean splitXML(String fileName) {
File inputXml = new File(fileName);

SAXReader saxReader = new SAXReader();
Document document = null;
try {
document = saxReader.read(inputXml);
} catch (DocumentException ex) {
Logger.getLogger(XmlDom4J.class.getName()).log(Level.SEVERE, null, ex);
}
Element rootElm = document.getRootElement();
String docXmlText = document.asXML();
String rootXmlText = rootElm.asXML();
//System.out.println(rootXmlText);
System.out.println("root:" + rootElm.getName());
List list = rootElm.elements();
Element e2 = (Element) list.get(0);
list = e2.elements();
System.out.println("root node number:" + list.size());

for (int i = 0; i < list.size(); i++) {
Element e3 = (Element) list.get(i);
System.out.println(e3.getName());

//拆分XML文件
Document exportDoc = DocumentHelper.createDocument();
Element exportElement = exportDoc.addElement(rootElm.getName());
Element exportElement2 = exportElement.addElement(e2.getName());
Element exportElement3 = exportElement2.addElement(e3.getName());

Iterator iter = e3.elementIterator(); // 获取根节点下的子节点
// 遍历head节点
String title = "";
while (iter.hasNext()) {
Element recordEle = (Element) iter.next();

Element exportElement4 = exportElement3.addElement(recordEle.getName());
//exportElement4.addCDATA(recordEle.getText());
exportElement4.setText(recordEle.getText().equals("") ? "" : recordEle.getText());
try {
OutputFormat outFmt = OutputFormat.createPrettyPrint();
outFmt.setEncoding("UTF-8");
outFmt.setIndent("  ");
XMLWriter output = new XMLWriter(
new FileWriter(new File(fileName.substring(0, fileName.indexOf(".")) + "_"
+ String.valueOf(i + 1)
+ fileName.substring(fileName.indexOf("."), fileName.length()))), outFmt);
output.write(exportDoc);
output.close();
} catch (IOException e) {
System.out.println(e.getMessage());
return false;
}

//System.out.println(recordEle.getName());
//System.out.println(recordEle.getText());
}
//System.out.print(getXmlElmentValue(rootXmlText));

}

return true;
}

private void nodeByNodes(Element node) {
if (node.element(node.getName()) != null) {
String id = node.attributeValue("id");
String name = node.attributeValue("name");
System.out.print(id + "-------");
System.out.println(name);
for (Iterator i = node.elementIterator("node"); i.hasNext();) {
Element newNode = (Element) i.next();
nodeByNodes(newNode);
}
} else {
String id = node.attributeValue("id");
String name = node.attributeValue("name");
System.out.print(id + "-------");
System.out.println(name);
}
}

public static void main(String[] argv) {
XmlDom4J dom4j = new XmlDom4J();
dom4j.parseDocument("<?xml version=\"1.0\" encoding=\"utf-8\"?><STOREMASTERBRIDGE><STOREMASTER><WHSE>NT1</WHSE><STORE_NBR>0022410038</STORE_NBR><STOREDETAIL><NAME>联盛</NAME><ADDR_LINE_1>N/A</ADDR_LINE_1><ADDR_LINE_2>N/A</ADDR_LINE_2><ADDR_LINE_3>N/A</ADDR_LINE_3><CITY>N/A</CITY><ZIP>N/A</ZIP><CNTRY>CN</CNTRY></STOREDETAIL><STOREFIELDS><CONTACT>N/A</CONTACT><EMAIL>联盛_物流专用</EMAIL><DFLT_CO>2100</DFLT_CO><DFLT_DIV>001</DFLT_DIV><STAT_CODE>0</STAT_CODE><GRP>SAP</GRP><RTE_ATTR>联盛_物流专用</RTE_ATTR><RTE_TO>0022410038</RTE_TO></STOREFIELDS></STOREMASTER><STOREMASTER><WHSE>NT1</WHSE><STORE_NBR>0022410039</STORE_NBR><STOREDETAIL><NAME>恒兴联运</NAME><ADDR_LINE_1>N/A</ADDR_LINE_1><ADDR_LINE_2>N/A</ADDR_LINE_2><ADDR_LINE_3>N/A</ADDR_LINE_3><CITY>N/A</CITY><ZIP>N/A</ZIP><CNTRY>CN</CNTRY></STOREDETAIL><STOREFIELDS><CONTACT>N/A</CONTACT><EMAIL>恒兴联运_物流专用</EMAIL><DFLT_CO>2100</DFLT_CO><DFLT_DIV>001</DFLT_DIV><STAT_CODE>0</STAT_CODE><GRP>SAP</GRP><RTE_ATTR>恒兴联运_物流专用</RTE_ATTR><RTE_TO>0022410039</RTE_TO></STOREFIELDS></STOREMASTER></STOREMASTERBRIDGE>", "NAME1");
System.exit(0);

SAXReader saxReader = new SAXReader();
Document document = null;
try {
document = saxReader.read(new File("d:/INV000042.xml"));
} catch (DocumentException ex) {
Logger.getLogger(XmlDom4J.class.getName()).log(Level.SEVERE, null, ex);
}
Element rootElm = document.getRootElement();
dom4j.nodeByNodes(rootElm);

//dom4j.generateDocument();
//dom4j.splitXML("d:/INV000042.xml");
//dom4j.parseDocument(new File("d:/INV000042.xml"), "outpt_pkt_hdr");
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息