利用kxml2解析和構造xml

在線文檔路徑

構造xml

xml的內容

<head xmlns="http://testxmlns">
    <UsernameToken>
        <Username>user123</Username>
        <Password Type="http://testtype">
            pass123
        </Password>
    </UsernameToken>
</head>

利用對象Element構造xml

將xml解析爲樹狀結構來構造

Element[] header = new Element[1];
//創建新的元素節點,參數1:命名空間,參數2:節點命
header[0] = new Element().createElement(null, "head");
//爲節點設置屬性,參數1:命名空間,參數2:屬性名,參數3:屬性值
header[0].setAttribute(null,"xmlns", "http://testxmlns");
Element UsernameToken = new Element().createElement(null, "UsernameToken"); 
Element userName = new Element().createElement(null, "Username");
//添加子節點,參數1:節點類型,參數2:節點對象
//Node.TEXT:文本節點,Node.ELEMENT:元素節點
userName.addChild(Node.TEXT, "user123");
Element passWord = new Element().createElement(null, "Password"); 
passWord.addChild(Node.TEXT, "pass123");
passWord.setAttribute(null,"Type", "http://testtype");
UsernameToken.addChild(Node.ELEMENT, userName);
UsernameToken.addChild(Node.ELEMENT, passWord);
header[0].addChild(Node.ELEMENT, UsernameToken);
//

利用KXmlSerializer構造xml的字符串

KXmlSerializer序列化按xml的順序構造xml

//實例化KXmlSerializer
KXmlSerializer serializer = new KXmlSerializer();
//KXmlSerializer繼承類XmlSerializer,所以也可以實例化XmlSerializer來構造xml
//XmlPullParserFactory factory = XmlPullParserFactory.newInstance(System.getProperty(XmlPullParserFactory.PROPERTY_NAME), null);
//XmlSerializer serializer = factory.newSerializer();
StringWriter writer = new StringWriter();
//必須要有輸出
serializer.setOutput(writer);
//設置輸出自動按xml格式縮進 ,false不縮進
serializer.setFeature("http://xmlpull.org/v1/doc/features.html#indent-output", true);
//生成聲明行<?xml version="1.0" encoding="utf-8"?>
//serializer.startDocument("utf-8", null);
//設置節點名
serializer.startTag("", "head");
//設置節點屬性
serializer.attribute("", "xmlns", "http://testxmlns");
serializer.startTag("", "UsernameToken");
serializer.startTag("", "Username");
//設置節點值
serializer.text("user123");
serializer.endTag("","Username");
serializer.startTag("", "Password");
serializer.attribute("", "Type","http://testtype");
serializer.text("pass123");
serializer.endTag("","Password");
serializer.endTag("","UsernameToken");
serializer.endTag("","Security");
//對應startDocument
//serializer.endDocument();
System.out.println(writer.toString());

將Element格式的xml轉化爲String

KXmlSerializer serializer = new KXmlSerializer();
StringWriter writer = new StringWriter();
serializer.setOutput(writer);
//將xml數據寫入對象
header[0].write(serializer);
//設置自動縮進
serializer.setFeature("http://xmlpull.org/v1/doc/features.html#indent-output", true);
System.out.println(writer.toString());

從文件或者網絡中讀取xml並解析

從網絡獲取xml並存入文件中

//獲取網絡輸入流
InputStream in=new URL("http://www.baidu.com").openConnection().getInputStream();
//下面從文件獲取輸入流
//File f1= new File("1.xml");
//FileInputStream in = new FileInputStream(f1);
File f2= new File("2.xml");
//定義輸出位置
FileOutputStream fo = new FileOutputStream(f2);
//每次讀取的文件大小
byte[] bytes = new byte[1024];
//定義文件指針
int byteread;
while ((byteread = in.read(bytes)) != -1) {    
    fo.write(bytes, 0, byteread);  
}  
in.close();
fo.close();

解析字節流xml

注:parse.getAttributeName必須在parse.nextText()之前

InputStream in=new URL("http://www.baidu.com").openConnection().getInputStream();
KXmlParser parse=new KXmlParser();
parse.setInput(in,"utf-8");
boolean keepParsing=true;
while(keepParsing){
    int type = parse.next();
    switch (type) {
    case KXmlParser.START_DOCUMENT:  
        break;     
    case KXmlParser.START_TAG:     
        if("Username".endsWith(parse.getName())){
            System.out.println("userNamestr======="+parse.nextText());
        }else if("Password".endsWith(parse.getName())){
        //parse.getAttributeName必須在parse.nextText()之前
        //參數爲索引幾個屬性
            System.out.println("passWordstr_type======="+parse.getAttributeName(0)+"====="+parse.getAttributeValue(0));
            System.out.println("passWordstr======"+parse.nextText().trim());
        }
        break;     
    case KXmlParser.END_TAG:     
        break;     
    case KXmlParser.TEXT:     
        break;     
    case KXmlParser.END_DOCUMENT:
    //判斷是否結束  
        keepParsing = false;  
        break;     
    }     
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章