1. 程式人生 > >利用正則表示式解析簡單XML

利用正則表示式解析簡單XML

人生的第二篇CSDN部落格,還是好激動啊~

package homework;

import java.util.ArrayList;
import java.util.List;
import java.util.Stack;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * Created by Administrator on 2016/8/2.
 */

  /*
        解析XML語句,利用list儲存解析出的Shu的物件:

        當group(0)為空時說明是標籤開始時,如果是Books說明是一組新的
        組,所以new一個儲存結果的列表arraylist儲存Shu,當為Book時建立一個Shu物件放入臨時棧stack,判斷group(3),如果不為空
        說明是<Book/>這種情況,直接將stack中未被設定過內容的Shu彈出放入list結果集.
        當group(0)不為空時,說明是標籤的結束,如果是Book將臨時棧頂的Shu彈出並放入最終list,如果是Name或者Price則對
        棧頂的物件呼叫peek()修改內容

         */
public class JiexiShu { public static void main(String[] args) { String str = "<Books>\n" + " <Book>\n" + " <Name>Java入門</Name>\n" + " <Price>30.00</Price>\n" + " </Book>\n"
+ " <Book>\n" + " <Name>Java基礎</Name>\n" + " <Price>130.00</Price>\n" + " </Book>\n" + " <Book>\n" + " <Name>Java精通</Name>\n" + " <Price>256.00</Price>\n"
+ " </Book>\n" + " <Book>\n" + " <Name>Java進階</Name>\n" + " <Price>998.00</Price>\n" + " </Book>\n" + " <Book>\n" + " <Name>程式設計師之禪</Name>\n" + " <Price>122.00</Price>\n" + " </Book>\n" + " <Book>\n" + " <Name>頸椎指南</Name>\n" + " <Price>50.00</Price>\n" + " </Book>\n" + " <Book>\n" + " <Name>活著</Name>\n" + " <Price>26.00</Price>\n" + " </Book>\n" + " <Book/>\n" + "</Books>"; List<Shu> list = null; Stack<Shu> stack = new Stack<>(); Stack<Integer> last = new Stack<>(); Pattern pattern=Pattern.compile("<(/?)([^<>/]+)(/?)>"); Matcher matcher=pattern.matcher(str); while (matcher.find()){ if(matcher.group(1).isEmpty()){ last.push(matcher.end()); switch (matcher.group(2)){ case "Books": list=new ArrayList<>(); break; case "Book": stack.push(new Shu()); break; } if (!matcher.group(3).isEmpty()){ last.pop(); switch (matcher.group(2)){ case "Book": list.add(stack.pop()); break; } } }else { switch (matcher.group(2)){ case "Name": stack.peek().setName(str.substring(last.pop(),matcher.start())); break; case "Price": stack.peek().setId(str.substring(last.pop(),matcher.start())); break; case "Book" : list.add(stack.pop()); break; } } } for (Shu shu : list) { System.out.println(shu); } } }

class Shu:

package homework;

/**
* Created by Administrator on 2016/8/2.
*/
public class Shu {
private String name;

private String id;
public Shu() {
}
public Shu(String name, String id) {
    this.name = name;
    this.id = id;
}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public String getId() {
    return id;
}

public void setId(String id) {
    this.id = id;
}

@Override
public String toString() {
    return "Shu{" +
            "name='" + name + '\'' +
            ", id='" + id + '\'' +
            '}';
}

}