jaxp解析xml
发布时间:2020-12-16 05:43:10 所属栏目:百科 来源:网络整理
导读:JAXP解析XML概要 *jaxp是JavaSE的一部分 *jaxp解析器在javax.xml.parsers包里 dom: DocumentBuilder:解析器类 DocumentBuilderBuilder:解析器工厂 sax: SAXParser:解析器 SAXParserFactory:解析器工厂 -----------------------------------------------
JAXP解析XML概要
*jaxp是JavaSE的一部分 *jaxp解析器在javax.xml.parsers包里 dom: DocumentBuilder:解析器类 DocumentBuilderBuilder:解析器工厂 sax: SAXParser:解析器 SAXParserFactory:解析器工厂 ------------------------------------------------------- DOM: DocumentBuilder *抽象类 *用DocumentBuilderFactory.newDocumentBuilder() 获取实例 方法—— parse("xml路径"):解析xml文档,返回Document对象 ****Document是一个接口,其父对象是Node 与js中相似的方法: getElementsByTagName(String tagname) ——得到标签,返回集合 createElement(String tagname) ——创建标签 createTextNode(String data) ——创建文本 appendChild(Node newChild) ——把文本添加到标签下 removeChild() ——删除节点 getParentNode ——获取到父节点 ............... DocumentBuilderFactory *抽象类 *用newInstance()获取实例 对xml文档进行操作:
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <preson> <p1> <name>xiaobai</name> <age>20</age> </p1> <p1> <name>xiaohua</name> <age>20</age> <sex>male</sex> </p1> </preson>一、查询操作 1.创建解析器工厂 2.根据解析器工厂创建解析器 3.解析xml,返回document 4.得到所有的name元素 5.遍历集合 public static void selectAll() throws ParserConfigurationException,SAXException,IOException { DocumentBuilderFactory builderFActory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder=builderFActory.newDocumentBuilder(); Document document=builder.parse("src/1.xml"); //得到name元素 NodeList list = document.getElementsByTagName("name"); //遍历集合 for(int i=0;i<list.getLength();i++){ Node name1=list.item(i); //得到name中的值 String s=name1.getTextContent(); System.out.println(s); } }
二、添加元素 1.创建解析器工厂 2.根据解析器工厂创建解析器 3.解析xml,返回document 4.得到要添加元素的父元素 5.创建标签 6.创建文本 7.将其文本添加到该标签下 8.将标签添加到其父标签下 9.回写xml public static void addSex() throws Exception{ DocumentBuilderFactory builderFactory=DocumentBuilderFactory.newInstance(); DocumentBuilder builder=builderFactory.newDocumentBuilder(); Document document=builder.parse("src/1.xml"); NodeList list=document.getElementsByTagName("p1"); Node p1=list.item(0); Element sex1=document.createElement("sex"); Text sexStr=document.createTextNode("male"); sex1.appendChild(sexStr); p1.appendChild(sex1); //回写 TransformerFactory transformerFactory=TransformerFactory.newInstance(); Transformer transformer=transformerFactory.newTransformer(); transformer.transform(new DOMSource(document),new StreamResult("src/1.xml")); } 三、修改节点内容 public static void modifySex() throws Exception{ DocumentBuilderFactory builderFactory=DocumentBuilderFactory.newInstance(); DocumentBuilder builder=builderFactory.newDocumentBuilder(); Document document = builder.parse("src/1.xml"); NodeList list = document.getElementsByTagName("sex"); Node sex1=list.item(0); sex1.setTextContent("famale"); //回写 TransformerFactory transformerFactory=TransformerFactory.newInstance(); Transformer transformer=transformerFactory.newTransformer(); transformer.transform(new DOMSource(document),new StreamResult("src/1.xml")); } 四、删除操作 1.创建解析器工厂 2.根据解析器工厂创建解析器 3.解析xml,返回document 4.得到要删除元素的父元素 5.得到该元素 6.将其从父元素下删除 7.回写xml public static void delPerson() throws Exception{ DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = builderFactory.newDocumentBuilder(); Document document = builder.parse("src/1.xml"); Node p1 = document.getElementsByTagName("p1").item(0); Node temp = document.getElementsByTagName("sex").item(0); p1.removeChild(temp); //回写 TransformerFactory transformerFactory=TransformerFactory.newInstance(); Transformer transformer=transformerFactory.newTransformer(); transformer.transform(new DOMSource(document),new StreamResult("src/1.xml")); } 五、利用递归实现遍历 public static void allElement() throws Exception{ DocumentBuilderFactory builderFActory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder=builderFActory.newDocumentBuilder(); Document document=builder.parse("src/1.xml"); //遍历 all(document); } private static void all(Node node) { // TODO Auto-generated method stub if(node.getNodeType()==Node.ELEMENT_NODE){ String str=node.getNodeName(); System.out.println(str); } NodeList list = node.getChildNodes(); for(int i=0; i<list.getLength(); i++){ Node temp=list.item(i); all(temp); } }----------------------------------------------------------------------------------------- SAX:不能实现增删改操作 解析方式:事件驱动,边读边解析 SAXParser: *抽象类 *用SAXParseFactory.newSAXParser获取实例 ——————方法:parser(File f,DefaultHandle dh) File:xml路径 DefaultHandle:事件处理器 ————startElement(Stirng url,String localName, String qName,Attributes attributes) ————characters(char[] ch,int start,int length) ————endElement(Stirng url, String qName) SAXParseFactory: *有newInstance()方法获取实例 import java.io.IOException; import javax.xml.parsers.ParserConfigurationException; import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParserFactory; import org.xml.sax.Attributes; import org.xml.sax.SAXException; import org.xml.sax.helpers.DefaultHandler; public class TextSax { /** * @param args * @throws SAXException * @throws ParserConfigurationException * @throws IOException */ public static void main(String[] args) throws ParserConfigurationException,IOException { // TODO Auto-generated method stub /* * 1.创建解析器工厂 * 2.创建解析器 * 3.执行parse方法 * 4.创建类继承DefaultHandler * 5.重写3个方法 * */ //创建解析工厂 SAXParserFactory saxParserFactory=SAXParserFactory.newInstance(); SAXParser saxParser=saxParserFactory.newSAXParser(); saxParser.parse("src/1.xml",new MyDefault()); } } class MyDefault extends DefaultHandler{ @Override public void startElement(String uri,String qName,Attributes attributes) throws SAXException { // TODO Auto-generated method stub super.startElement(uri,localName,qName,attributes); System.out.print("<"+qName+"/>"); } @Override public void endElement(String uri,String qName) throws SAXException { // TODO Auto-generated method stub super.endElement(uri,qName); System.out.print("<"+qName+"/>"); } @Override public void characters(char[] ch,int length) throws SAXException { // TODO Auto-generated method stub super.characters(ch,start,length); System.out.print(new String(ch,length)); } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- PostgreSQL partition table's arithmetic tuning exam
- 关于React Native 报Export declarations are not supporte
- 如何将Backus-Naur Form表达式转换为正则表达式(.Net)?
- 关于FlashBuilder使用Starling框架调试运行出错问题(Chrom
- c – 如何使用具有两列的模型获取QComboBox的当前值?
- C/C++程序编译流程详解
- xml约束 Schema
- 正则表达式资料大全
- ruby-on-rails – 具有关联的FactoryGirl attributes_for
- SSH整合DWR时报HTTP Status 404 - There is no Action mapp