【黑马程序员】使用DOM4J+XPATH解析带有schema约束的XML文件
使用dom4j解析xml文件

使⽤dom4j解析xml⽂件⼀.读取指定位置下的资源⽂件src根⽬录下类名.class.getResourceAsStream("/⽂件名");与读取配置⽂件的类在同⼀包类名.class.getResourceAsStream("⽂件名");WEB-INF(或其⼦⽬录下)ServletContext servletContext=request.getServletContext();InputStream ins = servletContext.getResourceAsStream("/WEB-INF/⽂件名");⼆.解析指定路径下的资源⽂件:properties⽂件的解析⽅式有java.util.properties这个类来完成(properties⽂件以键值对的形式存在,需通过键名来获取值)import java.io.IOException;import java.io.InputStream;import java.util.Properties;public class PropertiseDemo {public static void main(String[] args) throws IOException {//获取到同包下的资源⽂件将其转化为流对象InputStream ins=PropertiseDemo.class.getResourceAsStream("/db.properties");//需要专业的⼯具类来将流中的数据解析出来Properties p=new Properties();p.load(ins);System.out.println("uname");System.out.println("upass");}}解析xml⽂件xml⽂件传统解析⽅式有dom4解析jdk/jdom解析,sax解析jdk/jdom 和 sax解析⽅式都是由上往下解析dom4j解析是由外到内解析,需要导包(dom4j-1.6.1.jar,)由于jdk/jdom和sax解析解析步骤⽐较复杂,使⽤的⼈较少xpath等同数据库的select语句document.selectNodes(xpath);//查⼀组document.selectSingleNode(xpath);//查单个import java.io.File;import org.dom4j.Document;import org.dom4j.DocumentException;import org.dom4j.Element;import org.dom4j.io.SAXReader;public class Dome02 {public static void main(String[] args) throws Exception {// dom4j+path 解析xml⽂件SAXReader saxReader = new SAXReader();Document document = saxReader.read(new File("D:\\eclipse\\j2ee06\\src\\com\\temp\\config.xml"));// 查⼀组for (Object o : document.selectNodes("/config/action/forward")) {Element element = (Element) o;System.out.print(element.attributeValue("mane"));System.out.print(element.attributeValue("path"));System.out.println(element.attributeValue("redirect"));}//查询⼀个Element element=(Element)document.selectSingleNode("/config/action");System.out.println(element.attributeValue("path"));}}列如:import java.io.InputStream;import java.util.List;import org.dom4j.Document;import org.dom4j.DocumentException;import org.dom4j.Element;import org.dom4j.io.SAXReader;public class Temp {public static void main(String[] args) throws Exception {InputStream inputStream = Temp.class.getResourceAsStream("/config.xml");SAXReader sax = new SAXReader();Document document = sax.read(inputStream);// 1. 获取所有action中type的值List<Element> stuElement = document.selectNodes("/config/action");for (Element element : stuElement) {String type = element.attributeValue("type");System.out.println(type);}// 2.获取第⼆个action中的type的值for (Element element : stuElement) {if ("/loginAction".equals(element.attributeValue("path"))) {String type = element.attributeValue("type");System.out.println(type);}}// 3.获取第⼆个action的所有forward的pathfor (Element element : stuElement) {if ("/loginAction".equals(element.attributeValue("path"))) {List<Element> forward = element.selectNodes("forward");for (Element forwardElement : forward) {String path = forwardElement.attributeValue("path");System.out.println(path);}}}// 4、获取第⼆个action的第⼆个forward的pathfor (Element element : stuElement) {if ("/loginAction".equals(element.attributeValue("path"))) {List<Element> forward = (List<Element>) element.selectNodes("forward");for (Element forwardElement : forward) {if ("success".equals(forwardElement.attributeValue("name"))) {String path = forwardElement.attributeValue("path");System.out.println(path);}}}}}}。
dom4j如何解析XML文件

dom4j如何解析XML⽂件最近在⼀些对xml⽂件的操作,下⾯简单写⼀个dom4j解析xml⽂件并将其封装到⼀个javabean中的例⼦,只是具有针对性的,不是通⽤的,仅供参考哦~~⾸先说:dom4j是⼀个java的XML api,性能优异、功能强⼤、易于使⽤。
使⽤dom4j对xml⽂件进⾏解析,并完成对⽂件的封装。
接下来,主要使⽤到的是dom4j中的SAXReader类,在这⾥我的流程是传⼊⼀个xml⽂件,调⽤写好的的⼯具类,完成对xml⽂件的解析。
xml⽂件如下:1<?xml version="1.0" encoding="UTF-8"?>23<school>45<college name="数学">6<class name="1612A" classroom="36306">7<student>8<property name="name" value="张三"></property>9<property name="age" value="23"></property>10<property name="garden" value="男"></property>11</student>12<student>13<property name="name" value="李四"></property>14<property name="age" value="22"></property>15<property name="garden" value="⼥"></property>16</student>17<student>18<property name="name" value="王五"></property>19<property name="age" value="24"></property>20<property name="garden" value="男"></property>21</student>22</class>23</college>2425<college name="英语">26<class name="1612C" classroom="35108">27<student>28<property name="name" value="赵六"></property>29<property name="age" value="21"></property>30<property name="garden" value="男"></property>31</student>32<student>33<property name="name" value="陈七"></property>34<property name="age" value="22"></property>35<property name="garden" value="男"></property>36</student>37<student>38<property name="name" value="郭⼋"></property>39<property name="age" value="25"></property>40<property name="garden" value="男"></property>41</student>42<student>43<property name="name" value="孙九"></property>44<property name="age" value="20"></property>45<property name="garden" value="⼥"></property>46</student>47</class>48</college>4950</school>Junit 测试如下:1public class Dom4jTest {23 @Test4public void test() throws Exception{567 File xmlFile = new File("⽂件位置");8// 调⽤⼯具类返回学⽣集合9 List<Student> studentList = XMLUtil.fileTransferList(xmlFile);1011for (Student student : studentList) {1213 System.out.println("-------------------------");14 System.out.println("姓名:"+student.getName());15 System.out.println("年龄:"+student.getAge());16 System.out.println("性别:"+student.getGarden());1718 }1920 }2122 }⼯具类如下:1public class XMLUtil {23public static List<Student> fileTransferList(File file) throws DocumentException{45// 返回值:学⽣信息集合6 List<Student> studentList=new ArrayList<Student>();78// 创建saxReader对象9 SAXReader reader = new SAXReader();1011// 通过read⽅法读取⼀个⽂件转换成Document对象12 Document document = reader.read(file);1314//获取根节点元素对象15 Element root = document.getRootElement();1617// 获取学院节点集合18 List<Element> collegeElements = root.elements();1920//已知属性名情况下21for (Element college : collegeElements) {2223 List<Student> collegeStudentList = getStudentListFromCollegeElement(college);2425 studentList.addAll(collegeStudentList);26 }2728return studentList;29 }3031private static List<Student> getStudentListFromCollegeElement(Element collegeElement){3233// 返回值:学⽣信息集合34 List<Student> studentList = new ArrayList<Student>();3536 List<Element> classElements = collegeElement.elements();3738for (Element classElement : classElements) {3940 List<Student> classStudentList = getStudentListFromClassElement(classElement);4142 studentList.addAll(classStudentList);43 }4445return studentList;4647 }4849private static List<Student> getStudentListFromClassElement(Element classElement){5051// 返回值:学⽣信息集合52 List<Student> studentList = new ArrayList<Student>();5354 List<Element> studentElements = classElement.elements();5556for (Element student : studentElements) {5758 List<Element> propertyElements = student.elements();5960 Student student2 = studentElementTransferStudentEntity(propertyElements);6162 studentList.add(student2);63 }6465return studentList;66 }6768private static Student studentElementTransferStudentEntity(List<Element> propertyElements){ 6970 Student stu = new Student();7172for (Element property : propertyElements) {7374 String name = property.attributeValue("name");75 String value = property.attributeValue("value");7677if("name".equals(name)){78 stu.setName(value);79 }80if("age".equals(name)){81 stu.setAge(value);82 }83if("garden".equals(name)){84 stu.setGarden(value);85 }86 }8788return stu;89 }9091 }最后呢,当然是显⽰结果了~~结果如下:到此结束了,以后也许有有其他解析的⽅法,也希望各位同道⼀块学习~~。
java中使用dom4j解析XML文件的方法教程

java中使⽤dom4j解析XML⽂件的⽅法教程前⾔dom4j是⼀个java的XML api,性能优异、功能强⼤、易于使⽤。
以前听说过来解析xml⽂件的⼏种标准⽅式;但是从来的没有应⽤过来,所以可以在google中搜索dmo4j解析xml⽂件的⽅式,学习⼀下dom4j解析xml的具体操作。
下⾯话不多说了,来⼀起看看详细的介绍吧注意:使⽤Dom4j开发,需下载dom4j相应的jar⽂件题⽬:后台利⽤dom4j解析student.xml⽂件,并返回List<Student>集合需要解析的XML:<?xml version="1.0" encoding="UTF-8"?><classes><class name="ST01"><student id="10001">user1</student><student id="10002">user2</student><student id="10003">user3</student></class><class name="ST02"><student id="10004">user4</student><student id="10005">user5</student><student id="10006">user6</student></class><class name="ST03"><student id="10007">user7</student><student id="10008">user8</student><student id="10009">user9</student></class><class name="ST04"><student id="10010">user10</student><student id="10011">user12</student><student id="10012">user13</student></class><class name="ST05"><student id="10013">user14</student><student id="10014">user15</student><student id="10015">user16</student></class></classes>java解析xml代码:/*** @author hh*/public class XmlUtil {/*** 读取xml学⽣列表信息* @return*/public List<Student> listStudent(){//创建SAXReader对象SAXReader reader=new SAXReader();Document document = null;try {//通过read⽅法读取⼀个⽂件转换成Document对象document = reader.read(new File("/Users/mac/Documents/students.xml"));} catch (DocumentException e) {e.printStackTrace();}//获取根节点元素对象Element node = document.getRootElement();return elementMethod(node);}/*** 获取节点中的信息* @param node* @return*/private List<Student> elementMethod(Element node){List<Student> list = new ArrayList<Student>();//获取所有class 节点List<Element> elementClass = node.elements("class"); for (Element aClass : elementClass) {//获取所有student节点List<Element> elelmentStu=aClass.elements("student"); for (Element element : elelmentStu) {//创建学⽣对象Student stu = new Student();//class节点⾥name的值stu.setSclazz(aClass.attribute("name").getValue());//student节点⾥ID的值stu.setSid(element.attribute("id").getValue());//student节点⾥的String值stu.setSname(element.getStringValue());list.add(stu);}}return list;}}实体类:/*** @author hh*/public class Student {private String sname;private String sid;private String sclazz;public String getSname() {return sname;}public void setSname(String sname) {this.sname = sname;}public String getSid() {return sid;}public void setSid(String sid) {this.sid = sid;}public String getSclazz() {return sclazz;}public void setSclazz(String sclazz) {this.sclazz = sclazz;}@Overridepublic String toString() {return "Student{" +"sname='" + sname + '\'' +", sid='" + sid + '\'' +", sclazz='" + sclazz + '\'' +'}';}}@Test 代码:public class StudentDaoTest {@Testpublic void testlistStudent(){List<Student> list = new XmlUtil().listStudent();for (Student student : list) {System.out.println(student);}}}运⾏结果:总结以上就是这篇⽂章的全部内容了,希望本⽂的内容对⼤家的学习或者⼯作具有⼀定的参考学习价值,如果有疑问⼤家可以留⾔交流,谢谢⼤家对的⽀持。
如何用DOM4J解析XML

如何⽤DOM4J解析XML认识XML XML是Extensible Markup Language 即可扩展标记语⾔的缩写,是⼀种简单的数据储存语⾔,使⽤⼀系列简单的标记来描述数据<element_name attribute_name="value" .../> // ⾃闭合<element_name attribute_name="value" ...> //对1-String2-<element_name attribute_name="value" .../>3-<element_name attribute_name="value" .../>...</element_name></element_name> 对XML的四种解析 ⽬前常⽤的XML解析技术有4种:(1)DOM DOM是基于XML的树结构来完成解析的,DOM解析XML的⽅式⾮常适⽤于多次访问XML的应⽤程序,但是其⽐较消耗资源;(2)SAX SAX是⼀种基于事件的解析,其主要是为了解决DOM解析的资源消耗问题⽽出现的,其优势是占⽤资源少,内存消耗⼩,⼀般在处理解析数据量⼤的XML⽂档才会使⽤(3)JDOM JDOM的⽬的是直接为JAVA编程服务,利⽤纯Java技术对XML⽂档实现解析⽣成,序列化以及其他操作;(4)DOM4J DOM4J具有性能优异、功能强⼤和易⽤的特点,同时它也是⼀个开放源代码的软件如何⽤DOM4J解析XML数据注:使⽤DOM4J解析XML,依赖于jar包 dom4j和jaxen 实现的步骤: 指定要解析的XML⽂件; 把XML⽂件转换成Document对象; 获取节点属性或⽂本的值。
File xml = new File("xmlfiles/xxx");SAXReader reader = new SAXReader();Document doc = reader.read(xml);//转换为⽂件Element root = doc.getRootElement();//获取节点属性List<Element> elements = root.elements(); //element 节点下⾯举⼀例分别分析xml⽂档 xml⽂档内容如下<?xml version="1.0" encoding="UTF-8"?><root><student id="1"><name>张飞</name><age>999</age><gender>男</gender></student><student id="2"><name>关⽻</name><age>888</age><gender>男</gender></student><student id="3"><name>刘备</name><age>777</age><gender>男</gender></student></root>若要读取XML⽂档中,可以直接⽤字符串输出的⽅式遍历,⾸先获取⼦元素,再遍历⼦元素⽂本//字符串输出for (Element element : elements) {String id = element.attributeValue("id");//获取当前指定⼦元素System.out.print(id+"\t");List<Element> subEs = element.elements();for (Element subE : subEs) {System.out.print(subE.getText()+"\t");//获取当前⼦元素⽂本}System.out.println("\n");}对于⼀个XML⽂档,我们也许需要检索所有的内容,但有时也可能需要检索某⼀固定节点或某⼀个属性,因此我们需要采取不同的检索⽅式 (1)当我们需要检索所有内容时,可以⽤动态数组的形式遍历出来即可; (2)当需要检索某⼀固定节点 Node node = document.selectSingleNode("//nodeName[@attrName = value]"); (3)检索某⼀属性(多节点检索) List<Element> = document.selecNodes("//nodeName[subEleName/text()='value']"); 取⼀分析结果,输出如下//检索固定节点Node node = doc.selectSingleNode("//student[@id=3]");//任意以student为根的节点if (null != node){Element element =(Element)node;String id = element.attributeValue("id");String name = element.elementText("name");String age = element.elementText("age");String gender = element.elementText("gender");Student student = new Student(Integer.parseInt(id),name,Integer.parseInt(age),gender);System.out.println(student);}当我们需要对XML⽂件进⾏改动时,有三种情况分别为新增、删除以及修改(变动过之后必须落盘) (1)新增 Element ele = root.addElement(...); Element subEle = ele.addElement(String nodeName); (2)删除 Element xxx = ... father.renmove(xxx); (3)修改 xxx.attribute(String attrName).setValue(String value); xxx.element(String subName).setText(String text); 下⾯例⼦为删除操作//删除//内存操作Node node = doc.selectSingleNode("//xxx[@id=3]");if (null != node){root.remove(node);//存盘OutputFormat format = OutputFormat.createPrettyPrint();XMLWriter writer = new XMLWriter(new OutputStreamWriter(new FileOutputStream("xmlfiles/kb.xml"),"UTF-8"),format);writer.write(doc);writer.flush();writer.close();}else {System.out.println("⽤户不存在");}。
dom4j解析xml文件

dom4j解析xml⽂件⼀、利⽤dom4j创建⼀个内容如下的xml⽂件SqlMapConfig.xml1<?xml version="1.0" encoding="UTF-8" ?>2<!DOCTYPE configuration PUBLIC "-////DTD Config 3.0//EN"3 "ibatis-3-config.dtd">4<configuration>5<environments default="development">6<environment id="MySQL">7<transactionManager type="JDBC">123</transactionManager>8<dataSource type="POOLED">9<property name="driver" value="com.mysql.jdbc.Driver"/>10<property name="url" value="jdbc:mysql://127.0.0.1:3306/test"/>11<property name="username" value="root"/>12<property name="password" value="admin"/>13</dataSource>14</environment>15</environments>1617<mappers>18<mapper resource="com/pojo/sql/DepMap.xml"/>19<mapper resource="com/pojo/sql/EmpMap.xml"/>20</mappers>21</configuration>步骤:1.创建⼀个输出流,指定创建的SqlMapConfig.xml⽂件的位置-------OutputStreamOutputStream os = new FileOutputStream("d:/SqlMapConfig.xml");2.创建⼀个xml编写器-------XMLWriterXMLWriter writer = new XMLWriter(os,OutputFormat.createPrettyPrint());这⾥os是前⾯新建的⼀个输出流,OutputFormat.createPrettyPrint()是指定输出的格式的,这⾥代表内容缩进。
黑马程序员安卓教程:xml文件解析方法

Xml文件解析方法解析的数据源已经布署完成了(具体可参考xml文件的解析简介),那么接下来就该编写解析该数据源的业务方法了。
1.编写业务bean实体新建一个实体包(com.itheima.weather.domain),编写业务bean。
●定义该业务bean的成员变量,如例1-1所示:例1-1例1-2public int getId() {return id;}public void setId(int id) {this.id = id;}public String getCity() {return city;}public void setCity(String city) {this.city = city;}public String getTemp() {return temp;}public void setTemp(String temp) {this.temp = temp;}public String getWind() {return wind;}public void setWind(String wind) {this.wind = wind;}public int getPm250() {return pm250;}public void setPm250(int pm250) {this.pm250 = pm250;}重写业务bean的toString()方法,如例1-3所示:例1-3@Overridepublic String toString() {return "城市id=" + id + ", 城市名称=" + city + ", 温度=" + temp+ ", 风力=" + wind + ", 埋汰指数=" + pm250 ;}2.编写业务方法新建一个业务包(com.itheima.weather.service),编写解析xml的业务方法。
使用dom4j解析xml文件

使⽤dom4j解析xml⽂件使⽤dom4j解析xml⽂件2017-09-12⽬录xml源⽂件<?xml version="1.0" encoding="GB2312" ?><PhoneInfo><Brand name="华为"><Type name="P9"/></Brand><Brand name="苹果"><Type name="iphone5"/><Type name="iphone6"/></Brand></PhoneInfo>代码:import java.io.FileWriter;import java.io.IOException;import java.io.Writer;import java.util.Iterator;import org.dom4j.*;import org.dom4j.io.OutputFormat;import org.dom4j.io.SAXReader;import org.dom4j.io.XMLWriter;public class Dom4jTest {Document dom = null;public static void main(String[] args) {Dom4jTest dom4j = new Dom4jTest();//获得Dom树dom4j.getDom();//添加新的节点dom4j.addNode();//更改元素属性dom4j.modify();//更改三星属性dom4j.modifySan();//删除节点dom4j.delete();//保存xml⽂件dom4j.saveXml("⼿机信息.xml");//显⽰xml⽂件dom4j.showInfo();}// 获得dom树public void getDom() {//通过reader获得Dom树SAXReader reader = new SAXReader();try {dom = reader.read("收藏信息.xml");} catch (DocumentException e) {// TODO Auto-generated catch blocke.printStackTrace();}// 保存xml⽂件public void saveXml(String path) {//设置编码格式//可以直接使⽤⽆参构造,效果也⼀样//OutputFormat encoding=new OutputFormat();OutputFormat encoding = OutputFormat.createPrettyPrint(); encoding.setEncoding("gb2312");Writer writer = null;try {writer = new FileWriter(path);//使⽤XMLWriter类进⾏dom树的输出XMLWriter writerXml = new XMLWriter(writer, encoding);//使⽤Write()进⾏dom树的写writerXml.write(dom);//最后关闭相关流writerXml.close();writer.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}// 显⽰xml⽂件信息public void showInfo() {//获得dom树的根节点Element BrandElements = dom.getRootElement();//获得元素的Iterator集合Iterator elementIterator = BrandElements.elementIterator();//对Interator集合进⾏遍历while (elementIterator.hasNext()) {Element brandElement = (Element) elementIterator.next();//获得元素的属性String brand = brandElement.attributeValue("name");//继续从上⼀个节点获得下⼀节点Iterator集合Iterator typeElements = brandElement.elementIterator();while (typeElements.hasNext()) {Element typeElement = (Element) typeElements.next(); String type = typeElement.attributeValue("name");System.out.println("⼿机:" + brand + ",型号" + type); }}}// 添加节点public void addNode() {//获得根节点Element Root = dom.getRootElement();//添加Brand元素Element brand = Root.addElement("Brand");//为Brand元素添加属性brand.addAttribute("name", "三星");//继续在新加元素添加Type元素Element type = brand.addElement("Type");//为Type元素添加属性type.addAttribute("name", "note");}// 修改属性,添加ID属性public void modify() {Element root = dom.getRootElement();Iterator elementIterator = root.elementIterator();int i = 0;while (elementIterator.hasNext()) {Element brand = (Element) elementIterator.next();brand.addAttribute("id", (++i) + "");}}//修改三星为SAMSUNGpublic void modifySan() {Element rootElement = dom.getRootElement();Iterator elementIterator = rootElement.elementIterator();while (elementIterator.hasNext()) {Element brand = (Element) elementIterator.next();if (brand.attributeValue("name").equals("三星")) {brand.addAttribute("name", "SAMSUNG");}}// 删除SAMSUNG元素public void delete() {Element rootElement = dom.getRootElement();Iterator elementIterator = rootElement.elementIterator();while (elementIterator.hasNext()) {Element brand = (Element) elementIterator.next();if (brand.attributeValue("name").equals("SAMSUNG")) { brand.getParent().remove(brand);}}}}。
如何使用DOM解析XML文件

如何使用DOM解析XML文件DOM(Document Object Model)是一种用于解析和处理XML文件的常用技术。
DOM API允许开发者以树形的数据结构方式访问和操作XML文件的内容。
1.导入DOMAPI:首先,你需要在你的代码中导入DOMAPI相关的类和方法。
在大多数编程语言中,都有现成的DOM库可供使用。
3. 加载XML文件:将要解析的XML文件加载到解析器中,可以使用解析器的`load(`或`parse(`方法,这个方法会将XML文件读取到内存中。
4. 创建一个DOM树:通过调用解析器的`getDocument(`或`parse(`方法,可以获取解析器对XML文件进行解析后的DOM树对象。
5. 获取根节点:通过DOM树对象的`getDocumentElement(`方法,可以获取XML文件的根节点。
6. 遍历子节点:通过DOM树对象的`getChildNodes(`方法,可以获取根节点的所有子节点。
然后,你可以使用循环遍历这些子节点,获取它们的内容和属性,并进一步操作。
7. 获取节点内容:通过DOM树节点对象的`getNodeValue(`方法,可以获取节点的文本内容。
如果节点有子节点,可以使用`getChildNodes(`方法获取它们的内容。
8. 获取节点属性:通过DOM树节点对象的`getAttribute(`方法,可以获取节点的属性值。
你需要在括号中指定要获取的属性名称。
9. 修改节点内容:通过DOM树节点对象的`setNodeValue(`方法,可以修改节点的文本内容。
10. 修改节点属性:通过DOM树节点对象的`setAttribute(`方法,可以修改节点的属性值。
你需要在括号中指定要修改的属性名称和新值。
11. 创建新节点:通过DOM树节点对象的`createElement(`方法,可以创建一个新节点对象。
你需要在括号中指定节点名称。
12. 添加节点:通过DOM树节点对象的`appendChild(`方法,可以将新节点添加为现有节点的子节点。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
【黑马程序员】使用DOM4J+XPATH 解析带有schema
约束的XML 文件
当在XML 文件中引入了外部约束,使用了命名空间的时候,如果要使用DOM4J+XPATH 解析XML 文件 可能会出现解析不到节点内容的问题,下面给出一种解决办法。
【步骤一】准备XML 文件和约束文件
XML 文件(aaa.xml ,该文件放置在src 目录下):
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 <?xml version ="1.0" encoding ="UTF-8"?>
<classes
xmlns:xsi ="/2001/XMLSchema-instance"
xmlns ="xiaofan"
xsi:schemaLocation ="xiaofan members.xsd"
>
<member no ="1">
<name >名称1</name >
<birthday >1992-11-09</birthday >
<hobby >女</hobby >
</member >
<member no ="2">
<name >名称2</name >
<birthday >1999-03-03</birthday >
<hobby >男</hobby >
</member >
</classes >
约束文件(members.xsd ):
01 02 03 04 05 06 07 08 09 10 11 <?xml version ="1.0" encoding ="UTF-8"?>
<schema
xmlns ="/2001/XMLSchema"
targetNamespace ="xiaofan"
elementFormDefault ="qualified">
<element name ="classes">
<complexType >
<sequence minOccurs ="1" maxOccurs ="unbounded">
<element name ="member">
<complexType >
12 13 14 15 16 17 18 19 20 21 22 23 24 <all >
<element name ="name" type ="string"></element >
<element name ="birthday" type ="date"></element >
<element name ="hobby" type ="string"></element >
</all >
<attribute name ="no"
type ="int"></attribute >
</complexType >
</element >
</sequence >
</complexType >
</element >
</schema >
在aaa.xml 文件中,自定义的命名空间是“xiaofan ”
【步骤二】使用DMO4J+XPATH 完成解析
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 @Test
public void oldCalXml(){
try {
//使用DOM4J SAXReader 进行解析
SAXReader saxReader = new SAXReader();
//拿到document 对象
Document document = saxReader.read("src/aaa.xml"); //准备一个map 集合,用于存放给xpath 使用的命名空间键值对
Map<String, String> map = new HashMap<String, String>(); //将XML 文件中我们自定义的命名空间xiaofan 交给一个key map.put("nsKey", "xiaofan");//第一个参数 命名空间的名字 第二个参数 是我们自定义的namespace
//使用DocumentFactory 装载刚刚设置的map 配置
saxReader.getDocumentFactory().setXPathNamespaceURIs(map);
//下面,就可以使用XML 对想要读取内容的节点进行解析了
List<Element> nodes = document.selectNodes("//nsKey:name"); for (Element element : nodes) {
System.out.println(element.getText());
}
} catch (DocumentException e) {
22
23
e.printStackTrace();
}
}
【打印如下】。