歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

Java使用dom4j解析XML字符串

對於XML文件或者字符串的解析有很多方法。

1、較簡潔的是W3C,實例如下:
public void parseXmlByW3C(){
    DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
    DocumentBuilder db;
    Document doc = null;
    try {
        db = dbf.newDocumentBuilder();
        InputStream inputStream = ClassLoader.getSystemResourceAsStream("interface.xml");
        doc = db.parse(inputStream);
    } catch (ParserConfigurationException e1) {
        e1.printStackTrace();
    } catch (SAXException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
    NamedNodeMap nodes = doc.getElementsByTagName("Interface").item(0).getAttributes();
    for(int i=0;i<nodes.getLength();i++){
        System.out.println(nodes.item(i).getNodeName()+" : " +nodes.item(i).getNodeValue()+"\n");
    }
    NodeList nodeList = doc.getElementsByTagName("property");
    for(int i=0;i<nodeList.getLength();i++){
        System.out.println(nodeList.item(i).getAttributes().item(0).getNodeValue()+":"+nodeList.item(i).getTextContent()+"\n");
    }
}

 

2、使用Dom4j解析XML字符串:


import java.text.ParseException;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.concurrent.atomic.AtomicInteger;
import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
public void parseXmlByDom4j(){
        //需要解析的XML串
        String strXml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" +"<Interface id=\"Test_V01\" content=\"output\" version=\"1.0\">"+"<property name=\"client_id\">test01</property>" +"<property name=\"project\">$ARG0</property>"+"</Interface>";
        Map<Object, Object> map = new HashMap<Object, Object>();
        Document doc = null;
        try {
            doc = DocumentHelper.parseText(strXml);
        } catch (DocumentException e) {
            //解析失敗
            e.printStackTrace();
        }
        if(doc==null)
            return;
        //獲取跟節點
        Element element = doc.getRootElement();
        //獲得根節點所有屬性值
        List<?> iList = element.attributes();
        for(int i=0;i<iList.size();i++){
            Attribute attribute = (Attribute)iList.get(i);
            map.put(attribute.getName(), attribute.getValue());
        }
        //遍歷根節點下屬性為property的子節點
        Iterator<?> pIterator = element.elementIterator("property");
        while(pIterator.hasNext()){
            Element ele = (Element)pIterator.next();
            //子節點的name的值,和Text
            map.put(ele.valueOf("@name"), ele.getText());
        }
        //循環輸出
        Iterator<Entry<Object, Object>> iterator = map.entrySet().iterator();
        while(iterator.hasNext()){
            Entry<Object, Object> entry = iterator.next();
            System.out.println(entry.getKey()+":"+entry.getValue());
        }
    }

在實際應用中,把W3C的解析方法放到Web工程中,總有解析錯誤,推薦使用Dom4j。

Copyright © Linux教程網 All Rights Reserved