请选择 进入手机版 | 继续访问电脑版

万邦! 学习论坛

 找回密码
 立即注册
搜索
查看: 16413|回复: 0

java修改xml节点方法

[复制链接]
发表于 2018-6-11 09:28:33 | 显示全部楼层 |阅读模式
1.最简单的修改[html] view plain copy



  • 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.稍微不一样的


[html] view plain copy



  • 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句代码

[html] view plain copy



  • //            former.setOutputProperty(javax.xml.transform.OutputKeys.DOCTYPE_PUBLIC, xmldoc.getDoctype().getPublicId());   
  •             former.setOutputProperty(javax.xml.transform.OutputKeys.DOCTYPE_SYSTEM, xmldoc.getDoctype().getSystemId());  

根据声明类型计入对应的忽略设置


---------------------------------华丽的分界线-------------------------------
北京万邦易嵌科技有限公司(www.wanbangee.com)专业提供单片机、M3/M4linuxAndroidQT技术服务、技术培训。
详细咨询请加QQ:715493858

QQ|Archiver|手机版|小黑屋|万邦易嵌学习论坛. ( 京ICP备17017219号 )

GMT+8, 2020-11-25 04:42

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表