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

java 解析xml文件样例

2009-04-20 16:17 260 查看
最近需要用到java解析xml文件,在网上找了些资料,然后封装了个xmlFileUtil类,现在和大家分享下:

xml文件样例:<?xml version="1.0" encoding="UTF-8"?><xml-body><cardcode><name>name</name><value>value</value></cardcode></xml-body>

xmlFileUtil类:

package rosten;

import org.w3c.dom.*;
import javax.xml.parsers.*;
import java.io.*;
import java.util.ArrayList;

public class XMLFileUtil {
// Document可以看作是XML在内存中的一个镜像,那么一旦获取这个Document 就意味着可以通过对
// 内存的操作来实现对XML的操作,首先第一步获取XML相关的Document
private Document xmlDoc;
private Element root;

public void LoadXmlFile(String filePath) throws Exception {

DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();

// 这个Document就是一个XML文件在内存中的镜像
this.setXmlDoc(db.parse(new File(filePath)));
this.setXmlElement(this.getXmlDoc().getDocumentElement());

}

@SuppressWarnings("unchecked")
// 通过属性名获取elemntes 样例:<code name="codeName"> return 为:codeName
public Element[] getElementsByName(Element parent, String name) {
ArrayList resList = new ArrayList();
NodeList nl = getNodeList(parent);
for (int i = 0; i < nl.getLength(); i++) {
Node nd = nl.item(i);
if (nd.getNodeName().equals(name)) {
resList.add(nd);
}
}
Element[] res = new Element[resList.size()];
for (int i = 0; i < resList.size(); i++) {
res[0] = (Element) resList.get(i);
}

return res;
}

// 获取element下面所有的子节点
public NodeList getNodeList(Element parent) {
return parent.getChildNodes();
}

// 获取elements的名称<code></code>return为:code
public String getElementName(Element element) {
return element.getNodeName();
}

public String getElementValueByName(Node node, String name) {

for(Node nd =node.getFirstChild();nd!=null;nd=nd.getNextSibling()){
if(nd.getNodeType()==Node.ELEMENT_NODE){

if(nd.getNodeName().equals(name)){
return nd.getFirstChild().getNodeValue();
}
}
}

return null;

}

// 获取element值<code>aa</code> return为:aa
public String getElementValue(Element element) {
NodeList nl = element.getChildNodes();
for (int i = 0; i < nl.getLength(); i++) {
if (nl.item(i).getNodeType() == Node.TEXT_NODE)// 是一个Text Node
{
return element.getFirstChild().getNodeValue();
}
}

return null;
}

public String getElementAttr(Element element, String attr) {
return element.getAttribute(attr);
}

public void setElementValue(Element element, String val) {
Node node = element.getOwnerDocument().createTextNode(val);
NodeList nl = element.getChildNodes();
for (int i = 0; i < nl.getLength(); i++) {
Node nd = nl.item(i);
if (nd.getNodeType() == Node.TEXT_NODE)// 是一个Text Node
{
nd.setNodeValue(val);
return;
}
}
element.appendChild(node);
}

public void setElementAttr(Element element, String attr,
String attrVal) {
element.setAttribute(attr, attrVal);
}

public static void addElement(Element parent, Element child) {
parent.appendChild(child);
}

public void addElement(Element parent, String tagName) {
Document doc = parent.getOwnerDocument();
Element child = doc.createElement(tagName);
parent.appendChild(child);
}

public void addElement(Element parent, String tagName, String text) {
Document doc = parent.getOwnerDocument();
Element child = doc.createElement(tagName);
setElementValue(child, text);
parent.appendChild(child);
}

public void removeElement(Element parent, String tagName) {
NodeList nl = parent.getChildNodes();
for (int i = 0; i < nl.getLength(); i++) {
Node nd = nl.item(i);
if (nd.getNodeName().equals(tagName)) {
parent.removeChild(nd);
}
}
}

public void setXmlDoc(Document xmlDoc) {
this.xmlDoc = xmlDoc;
}

public Document getXmlDoc() {
return xmlDoc;
}

public void setXmlElement(Element xmlElement) {
this.root = xmlElement;
}

public Element getXmlElement() {
return root;
}

}

使用方法:

package rosten;

import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

public class praseXml01 {

/**
* @param args
*/
public static void main(String[] args) {
XMLFileUtil xmlDeal = new XMLFileUtil();

try {
xmlDeal.LoadXmlFile("d:/MyXml.xml");
NodeList allNode = xmlDeal.getNodeList(xmlDeal.getXmlElement());

if(allNode==null){
System.out.println("xml文件中不包含任何信息.....");
return;
}

for(int i=0;i<allNode.getLength();i++){
Node node = allNode.item(i);
if(node.getNodeType()==Node.ELEMENT_NODE){

if(xmlDeal.getElementValueByName(node, "name")!=null){
System.out.println("name:" + xmlDeal.getElementValueByName(node, "name"));
}

if(xmlDeal.getElementValueByName(node, "value")!=null){
System.out.println("value :" +xmlDeal.getElementValueByName(node, "value"));
}

}
}

} catch (Exception e) {
e.printStackTrace();
}

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: