java如何使⽤org.w3c.dom操作XML⽂件本篇介绍在java中,如何使⽤org.w3c.dom中的相关内容来操作XML⽂件。包括:
如何在内存中构建XML⽂件并写⼊磁盘;
如何从磁盘读取XML⽂件到内存;
如何添加注释,读取注释;
如何添加属性,读取属性;
如何添加⼦元素,读取⼦元素;
下⾯直接贴出样例代码:
l.parsers.DocumentBuilder;
l.parsers.DocumentBuilderFactory;
l.parsers.ParserConfigurationException;
l.transform.OutputKeys;
l.transform.Transformer;
l.transform.TransformerConfigurationException;
l.transform.TransformerException;
l.transform.TransformerFactory;
l.transform.dom.DOMSource;
l.transform.stream.StreamResult;
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;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import flect.Field;
import flect.Method;
import flect.Modifier;
import flect.Type;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Date;
import java.util.HashSet;
import java.util.LinkedHashMap;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Map;
import java.util.Scanner;
import java.util.Set;
public class XMLSample{
private static void writeXML(Document document, String filePath) {
TransformerFactory transFactory = wInstance();
Transformer transformer = null;
try {
String parent = new File(filePath).getParent();
File pDir = new File(parent);
if (!ists()) {
pDir.mkdirs();
}
OutputStream os = new FileOutputStream(new File(filePath));
transformer = wTransformer();
transformer.setOutputProperty(OutputKeys.INDENT, "yes");
transformer.setOutputProperty(OutputKeys.ENCODING, "utf-8");
DOMSource source = new DOMSource();
source.setNode(document);
StreamResult result = new StreamResult();
result.setOutputStream(os);
os.flush();
} catch (TransformerConfigurationException e) {
e.printStackTrace();
} catch (TransformerException e) {
e.printStackTrace();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
private static Document readXML(String file) {
try {
// 得到DOM解析器的⼯⼚实例
DocumentBuilderFactory dbFactory = wInstance(); // 从DOM⼯⼚中获得DOM解析器
DocumentBuilder dbBuilder = wDocumentBuilder();
// 把要解析的xml⽂档读⼊DOM解析器
Document doc = dbBuilder.parse(file);
return doc;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
public static void showXMLDetail() {
Document document = readXML(mapperFilePath);
// 获取标签名为"dataset"的元素
Node mapper = ElementsByTagName("dataset").item(0);
// 下⾯依次读取dataset元素的每个⼦元素,每个⼦元素的标签名字为node for (int i = 0; i < ChildNodes().getLength(); i++) {
Node node = ChildNodes().item(i);
String s = NodeName();
LowerCase().equals("#comment")){
System.out.println("这是注释内容: "+TextContent());
error parse new
}else LowerCase().equals("#text")){
System.out.println("呐,这是标签之外的⽂本: "+TextContent());
}else if ("node".equals(s)) {
// 获取元素属性的值
String column = Attributes().getNamedItem("column").getNodeValue(); String field = Attributes().getNamedItem("property").getNodeValue(); }else{
// 其他的就不要了
}
}
}
public static void generateXML(){
try {
Element root;
Set<String> set = new HashSet<>();
set.add("node");
DocumentBuilderFactory factory = wInstance();
factory.setNamespaceAware(true);
DocumentBuilder documentBuilder = null;
documentBuilder = wDocumentBuilder();
Document document = wDocument();
root = ateElement("dataset");
document.appendChild(root);
set.forEach(p -> {
Element element = ateElement(p);
element.setAttribte("column","haha");
element.setAttribte("property","heihei");
root.appendChild(element);
});
writeXML(document, "d:/l");
} catch (ParserConfigurationException e) {
e.printStackTrace();
}
}
}
Java操作XML(使⽤org.w3c.dom)
⼀、创建DOM
XMLBuilder.java
⽤于创建DOM,Root结点
/********************************************************************
* 项⽬名称:rochoc <p>
* 包名称:l.oper <p>
* ⽂件名称:XmlBuilder <p>
* 编写者:luoc <p>
* 编写⽇期:2005-6-22 <p>
* 程序功能(类)描述:根据传⼊的XML⽂件⽣成Document和root结点<p>
*
* 程序变更⽇期:
* 变更作者:
* 变更说明:
********************************************************************/
l.oper;
import java.io.File;
import java.io.IOException;
l.parsers.DocumentBuilder;
l.parsers.DocumentBuilderFactory;
l.parsers.ParserConfigurationException;
import org.apache.log4j.Logger;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
l.sax.SAXException;
/**
* 类名:XmlBuilder <p>
* 类描述:根据传⼊的XML⽂件⽣成Document和root结点 <p>
* 编写者:luoc<p>
* 编写⽇期:2005-6-22<p>
* 主要public成员变量:<p>
* 主要public⽅法: <p>
**/
public class XmlBuilder
{
/**
*构造函数说明: <p>
*参数说明:@param path <p>
**/
public XmlBuilder(String path)
{
this.path=path;
init();
}
/**
* ⽅法名称:init<p>
* ⽅法功能:初始化函数<p>
* 参数说明: <p>
* 返回:void <p>
* 作者:luoc
* ⽇期:2005-6-22
**/
public void init()
{
buildDocument();
buildRoot();
}
/**
* ⽅法名称:buildDocument<p>
* ⽅法功能:将XML⽂件⽣成Document <p>
* 参数说明: <p>
* 返回:void <p>
* 作者:luoc
* ⽇期:2005-6-22
**/
private void buildDocument()
{
DocumentBuilderFactory wInstance(); try
{
DocumentBuilder wDocumentBuilder(); logger.debug("Construct document builder success.");
doc=builder.parse(new File(path));
logger.debug("Build xml document success.");
}catch(ParserConfigurationException e)
{
<("Construct document builder error:"+e);
}catch(SAXException e)
{
<("Parse xml file error:"+e);
}catch(IOException e)
{
<("Read xml file error:"+e);
}
}
/**
* ⽅法名称:buildRoot<p>
* ⽅法功能:⽣成XML的根结点<p>
* 参数说明: <p>
* 返回:void <p>
* 作者:luoc
* ⽇期:2005-6-22
**/
private void buildRoot()
{
DocumentElement();
}
/**
* @return 返回 doc。
*/
public Document getDoc()
{
return doc;
}
/**
* @param doc 要设置的 doc。
*/
public void setDoc(Document doc)
{
this.doc = doc;
}
/
**
* @return 返回 path。
*/
public String getPath()
{
return path;
}
/**
* @param path 要设置的 path。
*/
public void setPath(String path)
{
this.path = path;
}
/**
* @return 返回 root。
*/
public Element getRoot()
{
return root;
}
/**
* @param root 要设置的 root。
*/
public void setRoot(Element root)
{
< = root;
}
/*全局变量*/
private String path=null;//xml⽂件路径
private Document doc=null;//xml⽂件对应的document
private Element root=null;//xml⽂件的根结点
private Logger Logger(getClass().getName());
}
⼆、查,插⼊,删除,修改
XmlOper.java
⽤于操作XML⽂件,包括查、新增、删除、修改结点
/********************************************************************
* 项⽬名称:rochoc <p>
* 包名称:l.oper <p>
* ⽂件名称:XmlOper <p>
* 编写者:luoc <p>
* 编写⽇期:2005-6-22 <p>
* 程序功能(类)描述:对XML进⾏读写操作 <p>
*
* 程序变更⽇期:
* 变更作者:
* 变更说明:
********************************************************************/
l.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;
/**
* 类名:XmlOper <p>
* 类描述:对XML⽂件进⾏读写操作,均为静态函数 <p>
* 编写者:luoc<p>
* 编写⽇期:2005-6-22<p>
* 主要public成员变量:<p>
* 主要public⽅法: <p>
**/
public class XmlOper
{
/
**
*构造函数说明: <p>
*参数说明: <p>
**/
private XmlOper()
{
}
/**
* ⽅法名称:getNodeList<p>
* ⽅法功能:获取⽗结点parent的所有⼦结点<p>
* 参数说明:@param parent
* 参数说明:@return <p>
* 返回:NodeList <p>
* 作者:luoc
* ⽇期:2005-6-22
**/
public static NodeList getNodeList(Element parent)
{
ChildNodes();
}
/**
* ⽅法名称:getElementsByName<p>
* ⽅法功能:在⽗结点中查询指定名称的结点集 <p>
* 参数说明:@param parent
* 参数说明:@param name
* 参数说明:@return <p>
* 返回:Element[] <p>
* 作者:luoc
* ⽇期:2005-6-22
**/
public static Element [] getElementsByName(Element parent,String name) {
ArrayList resList=new ArrayList();
NodeList nl=getNodeList(parent);
for(int i=0;i&Length();i++)
{
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论