用java去解析一个最简单的XML文件
2016-08-02 20:28
459 查看
此处仅仅是去解析最基本的XML文件,XML文件如下:
上图是一个书的XML文件,我们创建一个Book类用来存储上面的图书实体
下面是解析XML的代码
<Books> <Book> <Name>Java入门</Name> <Price>30.00</Price> </Book> <Book> <Name>Java基础</Name> <Price>130.00</Price> </Book> <Book> <Name>Java精通</Name> <Price>256.00</Price> </Book> <Book> <Name>Java进阶</Name> <Price>998.00</Price> </Book> <Book> <Name>程序员之禅</Name> <Price>122.00</Price> </Book> <Book> <Name>颈椎指南</Name> <Price>50.00</Price> </Book> <Book> <Name>活着</Name> <Price>26.00</Price> </Book> <Book/> </Books>
上图是一个书的XML文件,我们创建一个Book类用来存储上面的图书实体
package learn; public class Book implements Comparable<Book>{ private String name; private float price; public Book() { } public Book(String name, float price) { this.name = name; this.price = price; } public String getName() { return name; } public void setName(String name) { this.name = name; } public float getPrice() { return price; } public void setPrice(float price) { this.price = price; } @Override public String toString() { return "Book{" + "name='" + name + '\'' + ", price=" + price + '}'; } @Override public int hashCode() { System.out.println("Book.hashCode"); return ((int) price); } @Override public boolean equals(Object obj) { System.out.println("Book.equals"); if (obj instanceof Book) { Book book = (Book) obj; return price == book.price && name.equals(book.name); } return false; } @Override public int compareTo(Book o) { int result = (int) (price - o.price); if (result == 0) { result = name.compareTo(o.name); } return result; } }
下面是解析XML的代码
package learn; import java.util.ArrayList; import java.util.List; import java.util.Stack; import java.util.regex.Matcher; import java.util.regex.Pattern; public class Test01 { 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<Book> list = null; Stack<Book> stack = new Stack<>(); Pattern pattern = Pattern.compile("<(/?)([^<>/]+)(/?)>");//此正则可能匹配到的是<> Matcher matcher = pattern.matcher(str); Stack<Integer> last = new Stack<>();//用来存放匹配到的<>,里面没有/,记录匹配到的<>的末尾位置 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 Book()); break; } if (!matcher.group(3).isEmpty()) { //匹配第三个括号里有/,即<../> last.pop(); //匹配到<../>,栈顶元素出栈 switch (matcher.group(2)) { case "Book": list.add(stack.pop()); break; } } } else {
//如果</...>里面的首个括号内不是空Integer pop = last.pop(); //记录上一个<..>或<../>的matcher.end() switch (matcher.group(2)) { case "Book": list.add(stack.pop()); break; case "Name": stack.peek().setName(str.substring(pop, matcher.start())); break; case "Price": stack.peek().setPrice(Float.parseFloat(str.substring(pop, matcher.start()))); break; } } } for (Book book : list) { //遍历得到的list,里面存入的是Book的实体 System.out.println(book); } }}
相关文章推荐
- 用java去解析一个最简单的XML文件
- (二)Java解析XML:一个简单的解析XML文件的例子
- 一个简单的Java模板工具类(二)—简单表达式解析实现
- XML DOM解析(Java)的一个简单实例
- Java解析、读取XML文件并存入TXT文件的简单例子
- 一个java解析xml的简单例子
- java实现一个叫简单的xml解析
- Java实现一个简单的定时器代码解析
- XML DOM解析(Java)的一个简单实例
- Android一个简单的xml文件解析
- 一个用java读取XML文件的简单方法(转)
- java实现一个简单的Web服务器实例解析
- java 文件上传 与 把文件解析成一个字节数组简单的后台示例
- JAVA使用simpleframework简单的解析XML文件
- 如何在WebService接收一个XML文件并解析,客户端如何发送这个XML文件?急求简单代码示例。。
- java--通过sax方式解析xml文件的简单实例
- [JAVA] 一个用java读取XML文件的简单方法
- Java 通过正则表达式实现简单xml文件解析
- 最简单的一个Java窗体示例!
- 一个SAX解析xml的简单程序。