※XMLInputFactory
※xml.xml
<?xml version="1.0" encoding="UTF-8"?> <root> <first fa="f1"> <second1 sa="s1">aaa</second1> <second2>bbb</second2> <second3>ccc</second3> </first> <first fa="f2"> <second1 sa="s2">ddd</second1> <second2>eee</second2> <second3>fff</second3> </first> <first fa="f3"> <second1 sa="s3">ggg</second1> <second2>hhh</second2> <second3>iii</second3> </first> </root>
※測試用的xml
※循序讀取
public void readXMLSequence() throws XMLStreamException { XMLInputFactory factory = XMLInputFactory.newInstance(); try (InputStream is = Test.class.getClassLoader().getResourceAsStream("xml.xml")) { XMLStreamReader reader = null; reader = factory.createXMLStreamReader(is); while (reader.hasNext()) { int type = reader.next(); System.out.println("type=" + type); if (type == XMLStreamConstants.START_ELEMENT) { System.out.println("<" + reader.getName() + ">"); } else if (type == XMLStreamConstants.CHARACTERS) { System.out.println("tag之間=" + reader.getText().trim()); } else if (type == XMLStreamConstants.END_ELEMENT) { System.out.println("</" + reader.getName() + ">"); } } reader.close(); } catch (IOException e) { e.printStackTrace(); } }
※tag和tag之間也會讀取
※讀取屬性
public void readXMLAttribute() throws XMLStreamException { XMLInputFactory factory = XMLInputFactory.newInstance(); try (InputStream is = Test.class.getClassLoader().getResourceAsStream("xml.xml")) { XMLStreamReader reader = null; reader = factory.createXMLStreamReader(is); while (reader.hasNext()) { int type = reader.next(); if (type == XMLStreamConstants.START_ELEMENT) { String name = reader.getName().toString(); if ("first".equals(name)) { for (int i = 0; i < reader.getAttributeCount(); i++) { System.out.println("attribute name=" + reader.getAttributeName(i)); System.out.println("attribute value=" + reader.getAttributeValue(i)); } } } } reader.close(); } catch (IOException e) { e.printStackTrace(); } }
※getResourceAsStream不熟的可看這篇
※讀取指定的元素
public void readXMLElement() throws XMLStreamException { XMLInputFactory factory = XMLInputFactory.newInstance(); try (InputStream is = Test.class.getClassLoader().getResourceAsStream("xml.xml")) { XMLStreamReader reader = null; reader = factory.createXMLStreamReader(is); while (reader.hasNext()) { int type = reader.next(); if (type == XMLStreamConstants.START_ELEMENT) { String name = reader.getName().toString(); if ("second2".equals(name)) { System.out.println("second2=" + reader.getElementText()); } if ("second3".equals(name)) { System.out.println("second3" + reader.getElementText() + System.getProperty("line.separator")); } } } reader.close(); } catch (IOException e) { e.printStackTrace(); } }
※只抓元素是second2和second3
※讀取指定的元素2
public void readXMLElement2() throws XMLStreamException { XMLInputFactory factory = XMLInputFactory.newInstance(); try (InputStream is = Test.class.getClassLoader().getResourceAsStream("xml.xml")) { XMLEventReader reader = factory.createXMLEventReader(is); int count = 0; while (reader.hasNext()) { XMLEvent event = reader.nextEvent(); if (event.isStartElement()) { String name = event.asStartElement().getName().toString(); if ("second2".equals(name)) { System.out.println("second2=" + reader.getElementText()); } if ("second3".equals(name)) { System.out.println("second3" + reader.getElementText()); } } count++; } System.out.println(count); } catch (IOException e) { e.printStackTrace(); } }
※使用XMLEvent
※使用過濾器
public void readXMLFilter() throws IOException { XMLInputFactory factory = XMLInputFactory.newInstance(); try (InputStream is = Test.class.getClassLoader().getResourceAsStream("xml.xml")) { XMLEventReader reader = factory.createFilteredReader(factory.createXMLEventReader(is), new EventFilter() { @Override public boolean accept(XMLEvent event) { if (event.isStartElement()) { String name = event.asStartElement().getName().toString(); if (Arrays.asList("second2", "second3").contains(name)) { return true; } } return false; } }); int count = 0; while (reader.hasNext()) { XMLEvent event = reader.nextEvent(); if (event.isStartElement()) { String name = event.asStartElement().getName().toString(); if ("second2".equals(name)) { System.out.println("second2=" + reader.getElementText()); } if ("second3".equals(name)) { System.out.println("second3" + reader.getElementText()); } } count++; } System.out.println(count); } catch (XMLStreamException e) { e.printStackTrace(); } }
※
沒有留言:
張貼留言