Stax处理XML(一)——基于光标的查找

前端之家收集整理的这篇文章主要介绍了Stax处理XML(一)——基于光标的查找前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

Stax处理XML,基于光标的查找,关键在于:

使用XMLInputFactory创建XMLStreamReader,获取了streamReader(光标)之后,(在while循环hasNext中)判断节点类型,是否为开始、结束、文本节点,之后根据情况进行处理。

(1)测试一:输出节点名称和text值

  1. /**
  2. * 基于光标的查找
  3. * 输出节点名称和text值
  4. */
  5. @Test
  6. public void test01() {
  7. XMLInputFactory factory = XMLInputFactory.newInstance();
  8. InputStream is = null;
  9. try {
  10. //输入流
  11. is = TestStax.class.getClassLoader().getResourceAsStream("books.xml");
  12. XMLStreamReader reader = factory.createXMLStreamReader(is);
  13. while(reader.hasNext()) {
  14. int type = reader.next();
  15. //判断节点类型,是否为开始、结束、文本节点,之后根据情况进行处理
  16. if (type == XMLStreamConstants.START_ELEMENT) {
  17. System.out.println(reader.getName());
  18. } else if (type == XMLStreamConstants.CHARACTERS) {
  19. System.out.println(reader.getText().trim());
  20. } else if (type == XMLStreamConstants.END_ELEMENT) {
  21. System.out.println("/" + reader.getName());
  22. }
  23. }
  24. } catch (XMLStreamException e) {
  25. e.printStackTrace();
  26. } finally {
  27. try {
  28. if(is != null) is.close();
  29. } catch (IOException e) {
  30. e.printStackTrace();
  31. }
  32. }
  33. }

输出结果:

bookstore

book

title
Everyday Italian
/title

author
Giada De Laurentiis
/author

year
2005
/year

price
30.00
/price

/book

book
...(此处省略)
/book

/bookstore

(2)测试二:输出属性,如果是book,就输出category

  1. /**
  2. * 输出属性
  3. * 如果是book,就输出category
  4. */
  5. @Test
  6. public void test02() {
  7. XMLInputFactory factory = XMLInputFactory.newInstance();
  8. InputStream is = null;
  9. try {
  10. is = TestStax.class.getClassLoader().getResourceAsStream("books.xml");
  11. XMLStreamReader reader = factory.createXMLStreamReader(is);
  12. while(reader.hasNext()) {
  13. int type = reader.next();
  14. if (type == XMLStreamConstants.START_ELEMENT) {
  15. String name = reader.getName().toString();
  16. if (name.equals("book")) {
  17. System.out.println(reader.getAttributeName(0) + ": " + reader.getAttributeValue(0));
  18. }
  19. }
  20. }
  21. } catch (XMLStreamException e) {
  22. e.printStackTrace();
  23. } finally {
  24. try {
  25. if(is != null) is.close();
  26. } catch (IOException e) {
  27. e.printStackTrace();
  28. }
  29. }
  30. }


输出结果:

category: COOKING
category: CHILDREN
category: WEB
category: WEB

(3)测试三:输出书的标题和价格

  1. /**
  2. * 输出书的标题和价格
  3. */
  4. @Test
  5. public void test03() {
  6. XMLInputFactory factory = XMLInputFactory.newInstance();
  7. InputStream is = null;
  8. try {
  9. is = TestStax.class.getClassLoader().getResourceAsStream("books.xml");
  10. XMLStreamReader reader = factory.createXMLStreamReader(is);
  11. while(reader.hasNext()) {
  12. int type = reader.next();
  13. if (type == XMLStreamConstants.START_ELEMENT) {
  14. String name = reader.getName().toString();
  15. if (name.equals("title")) {
  16. System.out.print(reader.getElementText() + ": ");
  17. }
  18. if (name.equals("price")) {
  19. System.out.print(reader.getElementText() + "\n");
  20. }
  21. }
  22. }
  23. } catch (XMLStreamException e) {
  24. e.printStackTrace();
  25. } finally {
  26. try {
  27. if(is != null) is.close();
  28. } catch (IOException e) {
  29. e.printStackTrace();
  30. }
  31. }
  32. }


输出结果:

Everyday Italian: 30.00 Harry Potter: 29.99 XQuery Kick Start: 49.99 Learning XML: 39.95

猜你在找的XML相关文章