1.最简单的修改
import java.io.FileOutputStream;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.OutputKeys;
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;
import org.w3c.dom.NodeList;
public class Test {
public static void main(String[] args) {
try {
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
Document doc = db.parse(XmlUtil.getCurrentPath());
NodeList list = doc.getElementsByTagName("entry");
for (int i = 0; i < list.getLength(); i++) {
Element ele = (Element) list.item(i);
String brandName = ele.getAttribute("key");
if (brandName.equals("outRoot")) {
ele.setTextContent("${user.dir}/generator-output/123");
}
}
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
DOMSource domSource = new DOMSource(doc);
// 设置编码类型
transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8");
StreamResult result = new StreamResult(new FileOutputStream(XmlUtil.getCurrentPath()));
transformer.transform(domSource, result);
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
2.稍微不一样的
import java.io.Console;
import java.io.File;
import java.io.IOException;
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 javax.xml.xpath.XPath;
import javax.xml.xpath.XPathConstants;
import javax.xml.xpath.XPathExpressionException;
import javax.xml.xpath.XPathFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
public class XmlUtil {
public static void main(String[] args) throws IOException {
modifySon("test");
}
public static void modifySon(String newPackage){
DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance();
dbf.setIgnoringElementContentWhitespace(true);
try{
DocumentBuilder db=dbf.newDocumentBuilder();
Document xmldoc=db.parse(XmlUtil.getCurrentPath());
Element root = xmldoc.getDocumentElement();
System.out.println(root.toString());
Element per =(Element) selectSingleNode("/properties/entry[@key='outRoot']", root);
per.setTextContent("${user.dir}/generator-output/"+newPackage);
TransformerFactory factory = TransformerFactory.newInstance();
Transformer former = factory.newTransformer();
// former.setOutputProperty(javax.xml.transform.OutputKeys.DOCTYPE_PUBLIC, xmldoc.getDoctype().getPublicId());
former.setOutputProperty(javax.xml.transform.OutputKeys.DOCTYPE_SYSTEM, xmldoc.getDoctype().getSystemId());
former.transform(new DOMSource(xmldoc), new StreamResult(new File(XmlUtil.getCurrentPath())));
}catch(Exception e){
e.printStackTrace();
}
}
public static Node selectSingleNode(String express, Element 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 String getCurrentPath(){
String path = XmlUtil.class.getProtectionDomain().getCodeSource().getLocation().getPath();
String rootPath = path.substring(1,path.length()-5)+"/src/test.xml";
return rootPath;
}
}特殊:其中xml文件中有DTD声明修改后没了
注意其中2句代码
// former.setOutputProperty(javax.xml.transform.OutputKeys.DOCTYPE_PUBLIC, xmldoc.getDoctype().getPublicId());
former.setOutputProperty(javax.xml.transform.OutputKeys.DOCTYPE_SYSTEM, xmldoc.getDoctype().getSystemId());根据声明类型计入对应的忽略设置