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>
相关推荐
一个项目同时用dom解析和sax解析xml文件貌似会报错,项目框架建一直是用sax和dom4j解析xml文件的。当我用dom解析xml文件。导入包后就报错识别不了xml文件的编码格式。于是做了一个sax解析xml文件的实例
关于解析xml文件的,很有用的东东关于解析xml文件的,很有用的东东关于解析xml文件的,很有用的东东关于解析xml文件的,很有用的东东关于解析xml文件的,很有用的东东关于解析xml文件的,很有用的东东关于解析xml...
python解析xml文件,python语言解析xml文件的常用的有两种方式: 通过MiniDom库解析xml文件 通过ElementTree库解析xml文件
C++实现对xml文件的解析,C++实现对xml文件的解析,C++实现对xml文件的解析。
java解析XML文件java解析XML文件java解析XML文件java解析XML文件java解析XML文件java解析XML文件
资源名称:使用Javascript解析xml文件或xml格式字符串 中文WORD版 内容简介: 本文档主要讲述的是使用Javascript解析xml文件或xml格式字符串;javascript中,不论是解析xml文件,...
支持SAX解析XML文件,DOM解析XML文件,Pull解析器解析XML文件,Pull生成XML文件,JAVA和Kotlin两种语言编写
delphi 使用nativeXML创建和解析xml文件
NULL 博文链接:https://xurichusheng.iteye.com/blog/1518547
android下解析xml文件的demo
关于jq读取xml的,有需要的朋友可以下载。
Java中如何解析XML文件,创建xml文件,增、删、改、查 xml节点信息
自己写的,运用dot net解析XML文件,并在用WinForm进行显示。。。。。
pull解析xml文件
使用java解析XML文件,解析完之后将解析结果导入mysql数据库中
tinyxml解析XML文件
解析XML文件例子
kettle 解析xml数据,xml多层分组嵌套,xml stax方法,完整解析案例使用(包含xml文件以及ktr文件)。ETL大数据迁移,数据清洗。XML Input Stream (StAX) 方法
用于解析XML文件用于解析XML文件用于解析XML文件用于解析XML文件用于解析XML文件用于解析XML文件用于解析XML文件用于解析XML文件用于解析XML文件