java 生成和解析xml

本文演示了如何使用Java创建并导出XML文件,包括设置版本、元素创建、属性设置、文本内容填充以及文件保存过程。同时展示了如何解析XML文件获取特定元素信息。
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.StringReader;  
 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.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException; 
 public class XMLHandler {
    public XMLHandler(){

    }

    public String createXML(){
        String xmlStr = null;
        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
        try {
            DocumentBuilder builder = factory.newDocumentBuilder();
            Document document = builder.newDocument();
            document.setXmlVersion("1.0");

            Element root = document.createElement("root");
            document.appendChild(root);

            Element telephone = document.createElement("TelePhone");

            Element nokia = document.createElement("type");
            nokia.setAttribute("name", "nokia");

            Element priceNokia = document.createElement("price");
            priceNokia.setTextContent("599");
            nokia.appendChild(priceNokia);

            Element operatorNokia = document.createElement("operator");
            operatorNokia.setTextContent("CMCC");
            nokia.appendChild(operatorNokia);

            telephone.appendChild(nokia);

            Element xiaomi = document.createElement("type");
            xiaomi.setAttribute("name", "xiaomi");

            Element priceXiaoMi = document.createElement("price");
            priceXiaoMi.setTextContent("699");
            xiaomi.appendChild(priceXiaoMi);

            Element operatorXiaoMi = document.createElement("operator");
            operatorXiaoMi.setTextContent("ChinaNet");
            xiaomi.appendChild(operatorXiaoMi);

            telephone.appendChild(xiaomi);

            root.appendChild(telephone);

            TransformerFactory transFactory = TransformerFactory.newInstance();
            Transformer transFormer = transFactory.newTransformer();
            DOMSource domSource = new DOMSource(document);

            //export string
            ByteArrayOutputStream bos = new ByteArrayOutputStream();
            transFormer.transform(domSource, new StreamResult(bos));
            xmlStr = bos.toString();

            //-------
            //save as file
            File file = new File("D://TelePhone.xml");
            if(!file.exists()){
                file.createNewFile();
            }
            FileOutputStream out = new FileOutputStream(file);
            StreamResult xmlResult = new StreamResult(out);
            transFormer.transform(domSource, xmlResult);
            //--------
        } catch (ParserConfigurationException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }catch (TransformerConfigurationException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }catch (TransformerException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        return xmlStr;
    }

    public void parserXML(String strXML){
        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
        try {
            DocumentBuilder builder = factory.newDocumentBuilder();
            StringReader sr = new StringReader(strXML);
            InputSource is = new InputSource(sr);
            Document doc = builder.parse(is);
            Element rootElement = doc.getDocumentElement();
            NodeList phones = rootElement.getElementsByTagName("type");
            for (int i = 0; i < phones.getLength(); i++) {
                Node type = phones.item(i);
                String phoneName = ((Element)type).getAttribute("name");
                System.out.println("Phone name = "+phoneName);
                NodeList properties = type.getChildNodes();
                for (int j = 0; j < properties.getLength(); j++) {
                    Node property = properties.item(j);
                    String nodeName = property.getNodeName();
                    if (nodeName.equals("price")) {
                        String price=property.getFirstChild().getNodeValue();
                        System.out.println("price="+price);
                    } else if (nodeName.equals("operator")) {
                        String operator=property.getFirstChild().getNodeValue();
                        System.out.println("operator="+operator);
                    }
                }
            }
        } catch (ParserConfigurationException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }catch (SAXException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        XMLHandler handler = new XMLHandler();
        String xml = handler.createXML();
        System.out.println(xml);
        handler.parserXML(xml);
    }
}
 

dom4j

public void test() throws IOException{
		File target = new File("D://");
		File targetFile = new File(target,String.valueOf(11+".xml"));
		DocumentFactory factory = new DocumentFactory();  
	    Document document = factory.createDocument(); 
	    Element catxml = document.addElement("ADI");
	    Element siteId = catxml.addElement("Objects").addElement("Object");
	    siteId.addAttribute("ElementType", "Category");
	    siteId.addAttribute("ID", "11");
	    siteId.addAttribute("Action", "REGIST");
	    siteId.addAttribute("Code",  "11");
	    siteId.addAttribute("ParentCode", "11");
	    		 
	    siteId.addElement("Property").addAttribute("Name","ParentID").setText( "11");
	    siteId.addElement("Property").addAttribute("Name", "Name").setText( "11");
	    siteId.addElement("Property").addAttribute("Name", "Sequence").setText("1");
	    siteId.addElement("Property").addAttribute("Name", "Status").setText("0");
	    siteId.addElement("Property").addAttribute("Name", "Description").setText("");

	    catxml.addElement("Mappings");
	  //将栏目xml在本地存放一份
        OutputFormat format = OutputFormat.createPrettyPrint();   //输出格式  
        format.setEncoding("UTF-8");  
        //设置编码  
        XMLWriter writer = new XMLWriter(new OutputStreamWriter(new FileOutputStream(targetFile),"UTF-8"), format);
		writer.write(catxml);   //写入emp1.xml文件  
		writer.flush();  
	    writer.close(); 
	}
	


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值