Schema定义xml文件 demo
1.xsd
<?xml version="1.0" encoding="UTF-8"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.example.org/1" xmlns:tns="http://www.example.org/1" elementFormDefault="qualified">
<element name="person">
<complexType>
<sequence>
<!-- sequence 表示出现的元素顺序 不能变 -->
<!-- all 只能出现一次 -->
<!-- choice 只能出现其中的一个 -->
<element name="name" type="string" ></element>
<!-- <element name="name" type="string" maxOccurs="unbounded"></element> 元素出现次数不限-->
<element name="age" type="int"></element>
</sequence>
<!-- <attribute name="id1" type="int" use="required"></attribute> 写在复杂元素,xml的person必须出现属性id1 -->
</complexType>
</element>
</schema>
被定义的person.xml
<?xml version="1.0" encoding="UTF-8"?>
<person xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://www.example.org/1"
xsi:schemaLocation="http://www.example.org/1 1.xsd">
<name>zhangsan</name>
<age>17</age>
</person>
dom4j开始。首先先来个p1.xml
<?xml version="1.0" encoding="UTF-8"?>
<person>
<p1 id1="xifan">
<name>zhangsan</name>
<age>110</age>
<sex>男</sex>
<sex>男</sex>
<sex>男</sex>
</p1>
<p1>
<name>lisi</name>
<age>30</age>
</p1>
</person>
Dom4j Demo
package cn.itcast.dom4jtest;
import java.io.FileOutputStream;
import java.util.List;
import javax.sound.sampled.LineListener;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
public class TestDom4j {
public static void main(String[] args) throws Exception {
// selectFirstName();
// selectName();
// addSex();
// addAgeBefore();
// modifyAge();
// delSch();
getValues();
}
//获取属性 第一个p1里面属性id1的值
public static void getValues() throws Exception{
Document document = Dom4jUtils.getDocument("src/p1.xml");
Element rootrElement =document.getRootElement();
Element p1 = rootrElement.element("p1");
System.out.println(p1.attributeValue("id1"));
}
//删除
public static void delSch() throws Exception{
Document document = Dom4jUtils.getDocument("src/p1.xml");
Element rooteElement = document.getRootElement();
Element p1 = rooteElement.element("p1");
Element school = p1.element("school");
p1.remove(school);
Dom4jUtils.xmlWriters("src/p1.xml", document);
}
//修改
public static void modifyAge() throws Exception{
Document document= Dom4jUtils.getDocument("src/p1.xml");
Element rootElement = document.getRootElement();
Element p1 = rootElement.element("p1");
Element ageElement = p1.element("age");
ageElement.setText("110");
Dom4jUtils.xmlWriters("src/p1.xml", document);
}
public static void addAgeBefore() throws Exception{
SAXReader saxReader = new SAXReader();
Document document = saxReader.read("src/p1.xml");
Element rootElement = document.getRootElement();
Element p1 = rootElement.element("p1");
List<Element> list = p1.elements();
//创建一个元素 和元素的文本
Element school = DocumentHelper.createElement("school");
school.setText("ecit");
list.add(1,school);
OutputFormat outputFormat = OutputFormat.createPrettyPrint();
XMLWriter xmlWriter = new XMLWriter(new FileOutputStream("src/p1.xml"),outputFormat);
xmlWriter.write(document);
xmlWriter.close();
}
public static void addSex()throws Exception{
SAXReader saxReader = new SAXReader();
Document document = saxReader.read("src/p1.xml");
Element rooElement = document.getRootElement();
Element p1 = rooElement.element("p1");
Element sex = p1.addElement("sex");
sex.setText("男");
//回写xml
//漂亮的排版格式
OutputFormat outputFormat = OutputFormat.createPrettyPrint();
//压缩格式
//OutputFormat outputFormat = OutputFormat.createCompactFormat();
XMLWriter xmlWriter = new XMLWriter(new FileOutputStream("src/p1.xml"),outputFormat);
xmlWriter.write(document);
xmlWriter.close();
}
//查询xml第一个name元素的值
public static void selectFirstName() throws Exception{
/*
* 1.创建解析器
* 2.得到document
* 3.得到根节点
*
* 4.得到第一个p1
*5.得到第一个p1下面的name
*6.得到name的值
* */
SAXReader saxReader = new SAXReader();
Document document = saxReader.read("src/p1.xml");
Element rootElement = document.getRootElement();
// List<Element> list = rootElement.elements("p1");
// if
// Element p1 = list.get(0);
// Element name1 = p1.element("name");
// System.out.println(name1.getText());
//这种也是第一个
// Element p1 = rootElement.element("p1");
}
//查询xml所有name元素的值
public static void selectName() throws Exception{
/*
* 1.创建解析器
* 2.得到document
* 3.得到根节点
*
* 4.得到p1
*5.得到p1下面的name
*6.得到name的值
* */
SAXReader saxReader = new SAXReader();
Document document = saxReader.read("src/p1.xml");
Element root = document.getRootElement();
List<Element> list = root.elements("p1");
//foreach
for (Element element : list) {
//element是每一个p1元素
Element name1 = element.element("name");
System.out.println(name1.getText());
}
}
}
Dom4j解析工具类
public class Dom4jUtils {
//创建解析器得到document
public static Document getDocument(String path){
try {
SAXReader saxReader = new SAXReader();
Document document = saxReader.read(path);
return document;
} catch (DocumentException e) {
e.printStackTrace();
}
return null;
}
//回写xml
public static void xmlWriters(String path,Document document){
try {
OutputFormat format =new OutputFormat().createPrettyPrint();
XMLWriter xmlWriter = new XMLWriter(new FileOutputStream(path), format);
xmlWriter.write(document);
xmlWriter.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
Dom4jXpth
package cn.itcast.dom4jtest;
import java.util.List;
import org.dom4j.Document;
import org.dom4j.Node;
import org.dom4j.io.SAXReader;
public class TestDom4jXpath {
public static void main(String[] args) throws Exception {
// test1();
// test2();
}
// 使用xpath查询xml中所有name元素的值
// 所有name元素的xpath表示://name
// 使用selectNodes("//name");获取多个节点
public static void test1() throws Exception {
/**
* 1.得到document 2.直接使用使用selectNodes("//name");
*/
SAXReader saxReader = new SAXReader();
Document document = saxReader.read("src/p1.xml");
List<Node> list = document.selectNodes("//sex");
for (Node node : list) {
System.out.println(node.getText());
}
}
// 获取一个节点:selectSingleNode("xpath表达式 ")
public static void test2() throws Exception {
SAXReader saxReader = new SAXReader();
Document document = saxReader.read("src/p1.xml");
Node name1 = document.selectSingleNode("//p1[@id1='xifan']/name");
System.out.println(name1.getText());
}
}
dom4j-1.6.1.jar dom4j 1.6.1下载地址
jaxen-1.1-beta-6.jar jaxen-1.1下载地址
另外 SAX解析xml
package cn.itcast.jaxpsax;
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 TestSax {
public static void main(String[] args) throws Exception{
/*
* 1.创建解析器工厂
* 2.创建解析器
* 3.执行parse方法
* 4.自己创建一个类,继承DefaultHandler
* 5.重写类里面的三个方法
* */
//1
SAXParserFactory saxParserFactory =SAXParserFactory.newInstance();
//2
SAXParser saxParser =saxParserFactory.newSAXParser();
//3
saxParser.parse("src/p1.xml", new MyDefault3());
}
}
//实现获取所有的name元素的值
class MyDefault2 extends DefaultHandler{
boolean flag = false;
@Override
public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
//判断qName是否是name元素
if("name".equals(qName)){
flag =true;
}
}
@Override
public void characters(char[] ch, int start, int length) throws SAXException {
//当flag是ture时 表示解析name元素
if(flag==true){
System.out.println(new String(ch,start,length));
}
}
@Override
public void endElement(String uri, String localName, String qName) throws SAXException {
//把flag设置成false 表示name元素结束
if ("name".equals(qName)) {
flag=false;
}
}
}
//实现获取第一个name元素的值
class MyDefault3 extends DefaultHandler{
boolean flag = false;
int index = 1;
@Override
public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
//判断qName是否是name元素
if("name".equals(qName)){
flag =true;
}
}
@Override
public void characters(char[] ch, int start, int length) throws SAXException {
//当flag是ture时 表示解析name元素
//索引是1
if(flag == true && index == 1){
System.out.println(new String(ch,start,length));
}
}
@Override
public void endElement(String uri, String localName, String qName) throws SAXException {
//把flag设置成false 表示name元素结束
if ("name".equals(qName)) {
index++;
}
}
}
//打印出原xml代码
class MyDefault1 extends DefaultHandler{
@Override
public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
System.out.print("<"+qName+">");
}
@Override
public void characters(char[] ch, int start, int length) throws SAXException {
System.out.print(new String(ch,start,length));
}
@Override
public void endElement(String uri, String localName, String qName) throws SAXException {
System.out.print("</"+ qName +">");
}
}