import java.io.ByteArrayOutputStream
import java.io.File
import java.io.FileOutputStream
import javax.xml.parsers.DocumentBuilder
import javax.xml.parsers.DocumentBuilderFactory
import javax.xml.transform.Transformer
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
public class Test {
public static void generate(){
try {
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance()
DocumentBuilder builder = factory.newDocumentBuilder()
Document document = builder.newDocument()
document.setXmlVersion("1.0")
document.setXmlStandalone(true)
Element root = document.createElement_x("MobileNet") //创建根节点
document.appendChild(root) //将根节点添加到Document对象中
Element pageElement = document.createElement_x("page")//设置第一个page元素到
pageElement.setAttribute("name", "list.jsp")//设置page节点的name属性
Element methodElement = document.createElement_x("method") //设置method节点
methodElement.setTextContent("get") //给method设置值
pageElement.appendChild(methodElement)//添加method节点到page节点内
Element displayElement = document.createElement_x("display") //设置method节点
displayElement.setTextContent("list撒旦发放")//给display设置值
pageElement.appendChild(displayElement) //添加display节点到page节点内
Element request_paramElement = document.createElement_x("request_param")
request_paramElement.setTextContent("request_param1|request_param2")
pageElement.appendChild(request_paramElement)
root.appendChild(pageElement)
pageElement = document.createElement_x("page") //设置第二个page元素到
pageElement.setAttribute("name", "content.jsp")//设置page节点的name属性
methodElement = document.createElement_x("method")
methodElement.setTextContent("post")
pageElement.appendChild(methodElement)
displayElement = document.createElement_x("display")
displayElement.setTextContent("content")
pageElement.appendChild(displayElement)
Element url_titleElement = document.createElement_x("url_title") //设置url_title节点
url_titleElement.setTextContent("title,publisher,published_calendar")//给url_title设置值
pageElement.appendChild(url_titleElement)//添加url_title节点到page节点内
root.appendChild(pageElement)//将page段加人根节点内
TransformerFactory transFactory = TransformerFactory.newInstance()//开始把Document映射到文件
Transformer transFormer = transFactory.newTransformer()
DOMSource domSource = new DOMSource(document) //设置输出结果
File file = new File("MobileNetRule.xml")//生成xml文件
if (!file.exists()) {
file.createNewFile()
}
FileOutputStream out = new FileOutputStream(file) //文件输出流
StreamResult xmlResult = new StreamResult(out) //设置输入源
transFormer.transform(domSource, xmlResult) //输出xml文件
System.out.println(file.getAbsolutePath()) //测试文件输出的路径
TransformerFactory tf = TransformerFactory.newInstance()
Transformer t = tf.newTransformer()
t.setOutputProperty("{/encoding/}","GB2312/")
ByteArrayOutputStream boc = new ByteArrayOutputStream()
t.transform(new DOMSource(document), new StreamResult(boc))
String xmlstring = boc.toString()
System.out.println(xmlstring)
} catch (Exception e) {
e.printStackTrace()
}
}
public static void main(String[] args){
Test.generate()
}
}
用java自带的就可以,有问题可以问我import javax.xml.parsers.DocumentBuilder
import javax.xml.parsers.DocumentBuilderFactory
//构造
public XMLUtil(String name) throws ParserConfigurationException {
filename = name
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance()
builder = factory.newDocumentBuilder()
document = builder.newDocument()
}
/**
* 保存到文件
*/
public void toSave() {
try {
TransformerFactory tf = TransformerFactory.newInstance()
Transformer transformer = tf.newTransformer()
DOMSource source = new DOMSource(document)
transformer.setOutputProperty(OutputKeys.ENCODING, "GB2312")
transformer.setOutputProperty(OutputKeys.INDENT, "yes")
PrintWriter pw = new PrintWriter(new FileOutputStream(filename))
StreamResult result = new StreamResult(pw)
transformer.transform(source, result)
} catch (TransformerException mye) {
mye.printStackTrace()
} catch (IOException exp) {
exp.printStackTrace()
}
}
import java.io.Fileimport java.io.FileNotFoundException
import java.io.FileOutputStream
import java.io.IOException
import org.w3c.dom.*
import org.xml.sax.SAXException
import javax.xml.parsers.*
import javax.xml.transform.*
import javax.xml.transform.dom.DOMSource
import javax.xml.transform.stream.*
import javax.xml.xpath.*
public class Test {
public static void main(String[] args) {
DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance()
Element theBook=null, theElem=null, root=null
try {
factory.setIgnoringElementContentWhitespace(true)
DocumentBuilder db=factory.newDocumentBuilder()
Document xmldoc=db.parse(new File("Test1.xml"))
root=xmldoc.getDocumentElement()
theBook=(Element) selectSingleNode("/books/book[name='哈里波特']", root)
System.out.println("--- 查询找《哈里波特》 ----")
Element nameNode=(Element)theBook.getElementsByTagName("price").item(0)
String name=nameNode.getFirstChild().getNodeValue()
System.out.println(name)
output(theBook)
System.out.println("=============selectSingleNode(books/book[name='哈里波特'], root)==================")
//--- 新建一本书开始 ----
theBook=xmldoc.createElement("book")
theElem=xmldoc.createElement("name")
theElem.setTextContent("新书")
theBook.appendChild(theElem)
theElem=xmldoc.createElement("price")
theElem.setTextContent("20")
theBook.appendChild(theElem)
theElem=xmldoc.createElement("memo")
theElem.setTextContent("新书的更好看。")
theBook.appendChild(theElem)
root.appendChild(theBook)
System.out.println("--- 新建一本书开始 ----")
output(xmldoc)
System.out.println("==============================")
//--- 新建一本书完成 ----
//--- 下面对《哈里波特》做一些修改。 ----
//--- 查询找《哈里波特》----
//--- 此时修改这本书的价格 -----
theBook.getElementsByTagName("price").item(0).setTextContent("15")//getElementsByTagName返回的是NodeList,所以要跟上item(0)。另外,getElementsByTagName("price")相当于xpath的".//price"。
System.out.println("--- 此时修改这本书的价格 ----")
output(theBook)
//--- 另外还想加一个属性id,值为B01 ----
theBook.setAttribute("id", "B01")
System.out.println("--- 另外还想加一个属性id,值为B01 ----")
output(theBook)
//--- 对《哈里波特》修改完成。 ----
//--- 要用id属性删除《三国演义》这本书 ----
theBook=(Element) selectSingleNode("/books/book[@id='B02']", root)
System.out.println("--- 要用id属性删除《三国演义》这本书 ----")
output(theBook)
theBook.getParentNode().removeChild(theBook)
System.out.println("--- 删除后的XML ----")
output(xmldoc)
//--- 再将所有价格低于10的书删除 ----
NodeList someBooks=selectNodes("/books/book[price<10]", root)
System.out.println("--- 再将所有价格低于10的书删除 ---")
System.out.println("--- 符合条件的书有 "+someBooks.getLength()+"本。 ---")
for(int i=0i<someBooks.getLength()i++) {
someBooks.item(i).getParentNode().removeChild(someBooks.item(i))
}
output(xmldoc)
saveXml("Test1_Edited.xml", xmldoc)
} catch (ParserConfigurationException e) {
e.printStackTrace()
} catch (SAXException e) {
e.printStackTrace()
} catch (IOException e) {
e.printStackTrace()
}
}
public static void output(Node node) {//将node的XML字符串输出到控制台
TransformerFactory transFactory=TransformerFactory.newInstance()
try {
Transformer transformer = transFactory.newTransformer()
transformer.setOutputProperty("encoding", "gb2312")
transformer.setOutputProperty("indent", "yes")
DOMSource source=new DOMSource()
source.setNode(node)
StreamResult result=new StreamResult()
result.setOutputStream(System.out)
transformer.transform(source, result)
} catch (TransformerConfigurationException e) {
e.printStackTrace()
} catch (TransformerException e) {
e.printStackTrace()
}
}
public static Node selectSingleNode(String express, Object source) {//查找节点,并返回第一个符合条件节点
Node result=null
XPathFactory xpathFactory=XPathFactory.newInstance()
XPath xpath=xpathFactory.newXPath()
try {
result=(Node) xpath.evaluate(express, source, XPathConstants.NODE)
} catch (XPathExpressionException e) {
e.printStackTrace()
}
return result
}
public static NodeList selectNodes(String express, Object source) {//查找节点,返回符合条件的节点集。
NodeList result=null
XPathFactory xpathFactory=XPathFactory.newInstance()
XPath xpath=xpathFactory.newXPath()
try {
result=(NodeList) xpath.evaluate(express, source, XPathConstants.NODESET)
} catch (XPathExpressionException e) {
e.printStackTrace()
}
return result
}
public static void saveXml(String fileName, Document doc) {//将Document输出到文件
TransformerFactory transFactory=TransformerFactory.newInstance()
try {
Transformer transformer = transFactory.newTransformer()
transformer.setOutputProperty("indent", "yes")
DOMSource source=new DOMSource()
source.setNode(doc)
StreamResult result=new StreamResult()
result.setOutputStream(new FileOutputStream(fileName))
transformer.transform(source, result)
} catch (TransformerConfigurationException e) {
e.printStackTrace()
} catch (TransformerException e) {
e.printStackTrace()
} catch (FileNotFoundException e) {
e.printStackTrace()
}
}
}
XML:
<?xml version="1.0" encoding="GBK"?>
<books>
<book>
<name>哈里波特</name>
<price>10</price>
<memo>这是一本很好看的书。</memo>
</book>
<book id="B02">
<name>三国演义</name>
<price>10</price>
<memo>四大名著之一。</memo>
</book>
<book id="B03">
<name>水浒</name>
<price>6</price>
<memo>四大名著之一。</memo>
</book>
<book id="B04">
<name>红楼</name>
<price>5</price>
<memo>四大名著之一。</memo>
</book>
</books>