天天看點

java xml w3c_Java操作XML(使用org.w3c.dom)

一、建立DOM

XMLBuilder.java

用于建立DOM,Root結點

package rochoc.xml.oper;

import java.io.File;

import java.io.IOException;

import javax.xml.parsers.DocumentBuilder;

import javax.xml.parsers.DocumentBuilderFactory;

import javax.xml.parsers.ParserConfigurationException;

import org.apache.log4j.Logger;

import org.w3c.dom.Document;

import org.w3c.dom.Element;

import org.xml.sax.SAXException;

public class XmlBuilder

{

public XmlBuilder(String path)

{

this.path=path;

init();

}

public void init()

{

buildDocument();

buildRoot();

}

private void buildDocument()

{

DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();

try

{

DocumentBuilder builder=factory.newDocumentBuilder();

logger.debug("Construct document builder success.");

doc=builder.parse(new File(path));

logger.debug("Build xml document success.");

}catch(ParserConfigurationException e)

{

logger.error("Construct document builder error:"+e);

}catch(SAXException e)

{

logger.error("Parse xml file error:"+e);

}catch(IOException e)

{

logger.error("Read xml file error:"+e);

}

}

private void buildRoot()

{

root=doc.getDocumentElement();

}

public Document getDoc()

{

return doc;

}

public void setDoc(Document doc)

{

this.doc = doc;

}

public String getPath()

{

return path;

}

public void setPath(String path)

{

this.path = path;

}

public Element getRoot()

{

return root;

}

public void setRoot(Element root)

{

this.root = root;

}

private String path=null;//xml檔案路徑

private Document doc=null;//xml檔案對應的document

private Element root=null;//xml檔案的根結點

private Logger logger=Logger.getLogger(getClass().getName());

}

二、查找,插入,删除,修改

XmlOper.java

用于操作XML檔案,包括查找、新增、删除、修改結點

package rochoc.xml.oper;

import java.util.ArrayList;

import org.apache.log4j.Logger;

import org.w3c.dom.Document;

import org.w3c.dom.Element;

import org.w3c.dom.Node;

import org.w3c.dom.NodeList;

public class XmlOper

{

private XmlOper()

{

}

public static NodeList getNodeList(Element parent)

{

return parent.getChildNodes();

}

public static Element [] getElementsByName(Element parent,String name)

{

ArrayList resList=new ArrayList();

NodeList nl=getNodeList(parent);

for(int i=0;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

{

res[0]=(Element)resList.get(i);

}

logger.debug(parent.getNodeName()+"'s children of "+name+

"'s num:"+res.length);

return res;

}

public static String getElementName(Element element)

{

return element.getNodeName();

}

public static String getElementValue(Element element)

{

NodeList nl=element.getChildNodes();

for(int i=0;i

{

if(nl.item(i).getNodeType()==Node.TEXT_NODE)//是一個Text Node

{

logger.debug(element.getNodeName()+" has a Text Node.");

return element.getFirstChild().getNodeValue();

}

}

logger.error(element.getNodeName()+" hasn't a Text Node.");

return null;

}

public static String getElementAttr(Element element,String attr)

{

return element.getAttribute(attr);

}

public static void setElementValue(Element element,String val)

{

Node node=element.getOwnerDocument().createTextNode(val);

NodeList nl=element.getChildNodes();

for(int i=0;i

{

Node nd=nl.item(i);

if(nd.getNodeType()==Node.TEXT_NODE)//是一個Text Node

{

nd.setNodeValue(val);

logger.debug("modify "+element.getNodeName()+"'s node value succe.");

return;

}

}

logger.debug("new "+element.getNodeName()+"'s node value succe.");

element.appendChild(node);

}

public static void setElementAttr(Element element,

String attr,String attrVal)

{

element.setAttribute(attr,attrVal);

}

public static void addElement(Element parent,Element child)

{

parent.appendChild(child);

}

public static void addElement(Element parent,String tagName)

{

Document doc=parent.getOwnerDocument();

Element child=doc.createElement(tagName);

parent.appendChild(child);

}

public static void addElement(Element parent,String tagName,String text)

{

Document doc=parent.getOwnerDocument();

Element child=doc.createElement(tagName);

setElementValue(child,text);

parent.appendChild(child);

}

public static void removeElement(Element parent,String tagName)

{

logger.debug("remove "+parent.getNodeName()+"'s children by tagName "+tagName+" begin...");

NodeList nl=parent.getChildNodes();

for(int i=0;i

{

Node nd=nl.item(i);

if(nd.getNodeName().equals(tagName))

{

parent.removeChild(nd);

logger.debug("remove child '"+nd+"' success.");

}

}

logger.debug("remove "+parent.getNodeName()+"'s children by tagName "+tagName+" end.");

}

static Logger logger=Logger.getLogger("XmlOper");

}

三、建立XML檔案

XmlCreater.java

用于建立XML檔案

package rochoc.xml.oper;

import java.io.File;

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.apache.log4j.Logger;

import org.w3c.dom.Document;

import org.w3c.dom.Element;

public class XmlCreater

{

public XmlCreater(String path)

{

this.path=path;

init();

}

private void init()

{

DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();

try

{

DocumentBuilder builder=factory.newDocumentBuilder();

doc=builder.newDocument();//建立DOM

}catch(ParserConfigurationException e)

{

logger.error("Parse DOM builder error:"+e);

}

}

public Element createRootElement(String rootTagName)

{

if(doc.getDocumentElement()==null)

{

logger.debug("create root element '"+rootTagName+"' success.");

Element root=doc.createElement(rootTagName);

doc.appendChild(root);

return root;

}

logger.warn("this dom's root element is exist,create fail.");

return doc.getDocumentElement();

}

public Element createElement(Element parent,String tagName)

{

Document doc=parent.getOwnerDocument();

Element child=doc.createElement(tagName);

parent.appendChild(child);

return child;

}

public Element createElement(Element parent,String tagName,String value)

{

Document doc=parent.getOwnerDocument();

Element child=doc.createElement(tagName);

XmlOper.setElementValue(child,value);

parent.appendChild(child);

return child;

}

public void createAttribute(Element parent,String attrName,String attrValue)

{

XmlOper.setElementAttr(parent,attrName,attrValue);

}

public void buildXmlFile()

{

TransformerFactory tfactory=TransformerFactory.newInstance();

try

{

Transformer transformer=tfactory.newTransformer();

DOMSource source=new DOMSource(doc);

logger.debug("New DOMSource success.");

StreamResult result=new StreamResult(new File(path));

logger.debug("New StreamResult success.");

transformer.setOutputProperty("encoding","GBK");

transformer.transform(source,result);

logger.debug("Build XML File '"+path+"' success.");

}catch(TransformerConfigurationException e)

{

logger.error("Create Transformer error:"+e);

}catch(TransformerException e)

{

logger.error("Transformer XML file error:"+e);

}

}

public Document getDoc()

{

return doc;

}

public void setDoc(Document doc)

{

this.doc = doc;

}

public String getPath()

{

return path;

}

public void setPath(String path)

{

this.path = path;

}

private Logger logger = Logger.getLogger(getClass().getName());

private Document doc=null;//新建立的DOM

private String path=null;//生成的XML檔案絕對路徑

}