package com.org.domain; import java.io.IOException; import java.io.InputStream; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.stream.EventFilter; import javax.xml.stream.XMLEventReader; import javax.xml.stream.XMLInputFactory; import javax.xml.stream.XMLStreamConstants; import javax.xml.stream.XMLStreamReader; import javax.xml.stream.events.XMLEvent; import javax.xml.transform.OutputKeys; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerFactory; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult; import javax.xml.xpath.XPath; import javax.xml.xpath.XPathConstants; import javax.xml.xpath.XPathFactory; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.NodeList; /** * 使用XMLInputFactory,XMLStreamReader,XMLEventReader解析XML文件 * */ public class DoXML { private String url="com/org/config/MyXml.xml"; /** * 文件读取流获取XML节点 * @throws IOException */ @Test public void testXMLStreamReader() throws IOException { try { XMLInputFactory factory = XMLInputFactory.newInstance(); InputStream in = DoXML.class.getClassLoader().getResourceAsStream(url); XMLStreamReader reader = factory.createXMLStreamReader(in); while (reader.hasNext()) { int type = reader.next(); if(type==XMLStreamConstants.START_ELEMENT){//开始节点 System.out.print(reader.getName()); }else if(type==XMLStreamConstants.CHARACTERS){//表示事件字符 System.out.println("type"+type); }else if(type==XMLStreamConstants.END_ELEMENT){//结束节点 System.out.println(reader.getName()); } } reader.close(); } catch (Exception e) { e.printStackTrace(); } } /** * XML事件读取 */ @Test public void testXMLEventReader(){ try { XMLInputFactory factory = XMLInputFactory.newInstance(); InputStream in = DoXML.class.getClassLoader().getResourceAsStream(url); XMLEventReader reader = factory.createXMLEventReader(in); while(reader.hasNext()){ XMLEvent event = reader.nextEvent(); if(event.isStartElement()){ String name = event.asStartElement().getName().toString(); if("Title".equals(name)){ System.out.println(reader.getElementText()); } } } }catch (Exception e) { e.printStackTrace(); } } /** * 通过XML事件Filter过滤节点的值 */ @Test public void testXMLFilteredReader(){ try { XMLInputFactory factory = XMLInputFactory.newInstance(); InputStream in = DoXML.class.getClassLoader().getResourceAsStream(url); XMLEventReader eventReader = factory.createXMLEventReader(in); XMLEventReader reader = factory.createFilteredReader(eventReader, new EventFilter() { @Override public boolean accept(XMLEvent event) { //有Titl节点返回true,否则返回false if(event.isStartElement()) { String name = event.asStartElement().getName().toString(); if(name.equals("Title")){ return true; } } return false; } }); while(reader.hasNext()){ XMLEvent event = reader.nextEvent(); if(event.isStartElement()){ String name = event.asStartElement().getName().toString(); if("Title".equals(name)){ System.out.println(reader.getElementText()); } } } } catch (Exception e) { e.printStackTrace(); } } /** * 通过XPath拿节点的值 */ @Test public void testXPathXMLNodeText(){ try { InputStream in = DoXML.class.getClassLoader().getResourceAsStream(url); DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder db = factory.newDocumentBuilder(); Document doc = db.parse(in); XPathFactory xPathFactory = XPathFactory.newInstance(); XPath xpath = xPathFactory.newXPath(); String expression = "Articles//item[@category='language']"; NodeList nodeList = (NodeList)xpath.evaluate(expression,doc,XPathConstants.NODESET); for(int i = 0 ; i< nodeList.getLength();i++){ Element ele = (Element)(nodeList.item(i)); NodeList tiel = ele.getElementsByTagName("Title"); Element e = (Element) tiel.item(0); System.out.println(e.getTextContent()); } } catch (Exception e) { e.printStackTrace(); } } /** * 修改XML节点的值 */ @Test public void testUpdateXMLNodeText(){ try { InputStream in = DoXML.class.getClassLoader().getResourceAsStream(url); Document doc = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(in); XPath xPath = XPathFactory.newInstance().newXPath(); Transformer transformer = TransformerFactory.newInstance().newTransformer(); transformer.setOutputProperty(OutputKeys.ENCODING,"UTF-8"); String expression = "Articles//item[@category='language']/Title";//修改Title的值 NodeList nodelist = (NodeList)xPath.evaluate(expression, doc,XPathConstants.NODESET); Element price = (Element)(nodelist.item(0)); price.setTextContent("PHP"); transformer.transform(new DOMSource(doc), new StreamResult(System.out)); } catch (Exception e) { e.printStackTrace(); } } /** * 组装XML */ //@Test public void testXMLStreamWriter(){/* try { XMLOutputFactory factory = XMLOutputFactory.newInstance(); XMLStreamWriter writer = factory.createXMLStreamWriter(System.out); String ns= "http://www.google.com"; writer.writeStartDocument("UTF-8","1.0"); writer.setDefaultNamespace("http://www.google.com"); writer.writeDefaultNamespace("http://www.google.com"); writer.writeNamespace("ns", ns); writer.setPrefix("ns", ns); writer.writeStartElement("ns","this",ns); writer.writeCharacters("test"); writer.writeStartElement("ns","test",ns); writer.writeCharacters("content"); writer.writeEndElement(); writer.writeEndElement(); writer.writeEndDocument(); writer.flush(); writer.close(); } catch (Exception e) { e.printStackTrace(); } */} }
<?xml version="1.0" encoding="UTF-8"?> <Articles> <item category='language'> <Title>Java</Title> <Description>跨平台</Description> </item> <item> <Title>C#</Title> <Description>跨语言</Description> </item> </Articles>
相关推荐
Java中的StAX解析主要使用`javax.xml.stream.XMLInputFactory`、`javax.xml.stream.XMLEventReader`和`javax.xml.stream.XMLStreamReader`: ```java import javax.xml.stream.XMLInputFactory; import javax.xml....
首先,我们需要创建一个`DocumentBuilderFactory`实例,然后使用它创建`DocumentBuilder`,最后通过`parse()`方法解析XML文件并返回一个`Document`对象。 2. **SAX解析器**: Simple API for XML (SAX) 是一种基于...
- 使用`XMLInputFactory`的`createXMLStreamReader()`方法,传入XML文件的输入源,创建`XMLStreamReader`。 - 循环调用`XMLStreamReader`的`next()`方法,处理每个XML事件。 - 在事件处理中,根据事件类型进行...
Java中的`javax.xml.stream.XMLInputFactory` 和 `javax.xml.stream.XMLOutputFactory` 用于创建输入和输出流,而`javax.xml.stream.XMLStreamReader` 和 `javax.xml.stream.XMLEventReader` 分别用于读取和处理事件...
在后续的系列文章中,通常会进一步探讨基于事件迭代器的API,包括如何使用XMLEventReader处理各种XML事件,以及如何利用这些事件对象来构建更复杂的XML处理逻辑。同时,也会探讨如何在实际的业务应用程序中有效地...
Java解析XML是一个常见的任务,XML(可扩展标记语言)作为一种数据交换格式,广泛应用于网络服务、配置文件和数据存储等领域。在Java中,有多种库和技术可以用来解析XML文档,主要包括DOM、SAX和StAX。 1. DOM...
- `javax.xml.stream.XMLInputFactory` 用于创建XMLStreamReader,这是读取XML的流式解析器。 - `javax.xml.stream.XMLEventReader` 提供了一种基于事件的读取XML的方法,可以按需读取下一个事件。 - `javax.xml....
- 引入`javax.xml.stream`包下的`XMLInputFactory`,`XMLStreamReader`和`XMLEventReader`类。 - 创建`XMLInputFactory`,通过`createXMLStreamReader()`或`createXMLEventReader()`方法获取读取器,然后使用迭代...
在Demo4j中,你可能能看到使用`javax.xml.stream.XMLInputFactory`, `XMLStreamReader`或`XMLEventReader`的示例。这种方式既不像DOM那样占用大量内存,也不需要像SAX那样处理大量的事件回调。 除了基础的解析方法...
StAX使用`javax.xml.stream.XMLInputFactory`、`XMLStreamReader`和`XMLEventReader`等类。它提供了一个迭代器模型,允许开发者按需读取XML事件,既可以向前也可以向后移动,适合处理大文件且需要高效性能的情况。 ...
- 读取:首先创建`DocumentBuilderFactory`实例,然后用其创建`DocumentBuilder`,最后调用`parse()`方法解析XML文件。 - 写入:通过`TransformerFactory`和`Transformer`,将DOM树转换为XML输出。 2. 使用SAX...
Java中的`javax.xml.stream.XMLInputFactory`、`javax.xml.stream.XMLEventReader`和`javax.xml.stream.XMLStreamReader`类是StAX的主要组件。 在这个例子中,可能包含了一个或多个使用这些API的Java程序,可能是...
Java的`javax.xml.stream.XMLInputFactory`、`javax.xml.stream.XMLEventReader`和`javax.xml.stream.XMLStreamReader`类支持StAX解析。 在Ajax登录验证的场景中,服务器端通常使用这些XML解析方法之一来处理从...
- 使用`XMLStreamReader`或`XMLEventReader`进行解析,例如: ```java XMLInputFactory factory = XMLInputFactory.newInstance(); XMLEventReader reader = factory.createXMLEventReader(new FileInputStream...
使用JDOM,你可以通过`org.jdom2.Document`和`org.jdom2.Element`等类来构建和解析XML。 ```java import org.jdom2.Document; import org.jdom2.Element; import org.jdom2.input.SAXBuilder; import org.jdom2....