Dom:
读取xml中所有学生信息并打印
public class Dom {
public static void main(String[] args) throws ParserConfigurationException, IOException, SAXException {
//获取解析器工厂
DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();
//通过工厂获得解析器实现类
DocumentBuilder db=factory.newDocumentBuilder();
//使用解析器加载xml文档---》得到Document对象db
Document doc= db.parse(new File("src/student.xml"));
//获取所有学生元素对象
NodeList nodeList=doc.getElementsByTagName("student");
//遍历获取每一个学生元素对象
for(int i=0;i<nodeList.getLength();i++){
Element studentEle= (Element) nodeList.item(i);
//获得number属性
String number=studentEle.getAttribute("number");
System.out.println(number);
//获得学生元素对象下的name,age,sex子元素对象
NodeList nodeList2=studentEle.getChildNodes();
for(int x=0;x<nodeList2.getLength();x++){
Node node=nodeList2.item(x);
if(node.getNodeType()==Node.ELEMENT_NODE){
Element ele=(Element)node; //获得name,age,sex内容
System.out.println(ele.getTextContent());
}
}
}
}
}
Dom4J解析:
//DOM4J是一个用来解析XML的框架
//DOM for java ====> 模仿DOM,DOM4J可以看作是对原生DOM的优化
//框架是啥???
//就是由很多很多的类构成的,共同完成一个大的功能
//DOM4J与JDOM
public class DOM4J {
//将xml文档加载,获得document对象
//将document对象,以字符串的形式输出
public static void main(String[] args) throws DocumentException {
//创建解析器
SAXReader reader = new SAXReader();
//使用解析器加载文档
Document document = reader.read(new File("JavaWeb2/src/student.xml"));
//将文档对象转换成String
String xml=document.asXML();
System.out.println(xml);
}
}
public class DOM4J_2 {
//将xml文档加载,获得document对象
//将document对象,以字符串的形式输出
public static void main(String[] args) throws DocumentException {
//创建解析器
SAXReader reader = new SAXReader();
//使用解析器加载文档
Document document = reader.read(new File("JavaWeb2/src/student.xml"));
//查文档中的所有学生
//获得根元素 迭代根元素下的所有student元素
Element students=document.getRootElement();
Iterator<Element> it= students.elementIterator("student");
while(it.hasNext()){
Element student=it.next();
//获得student元素上的number属性
String number=student.attributeValue("number");
System.out.println(number);
Element stuName=student.element("name");
String name=stuName.getText();
//再找student元素下的name age sex
//获得子元素的内容
String age=student.elementText("age");
String sex=student.elementText("sex");
System.out.println(name+"==>"+age+"==>"+sex);
}
}
}
使用Dom4J添加属性:
public class DOM4J_3 {
//增加一个学生 itcast_0003 jack 20
public static void main(String[] args) throws DocumentException, IOException {
//创建解析器
SAXReader reader = new SAXReader();
//使用解析器加载文档
Document document = reader.read(new File("JavaWeb2/src/student.xml"));
//获得根元素
Element root=document.getRootElement();
//为根元素添加student 子元素和属性
Element studentEle= root.addElement("student").addAttribute("number","itcast_0003");
//为student添加name age sex 子元素和内容
studentEle.addElement("name").addText("jack");
studentEle.addElement("age").addText("20");
studentEle.addElement("sex").addText("male");
//回写:
// 创建格式化器
OutputFormat format=OutputFormat.createPrettyPrint();
//创建写入器
XMLWriter writer=new XMLWriter(new FileWriter("JavaWeb2/src/student.xml"),format);
//将文档写入文件
writer.write(document);
//关闭资源
writer.close();
}
}
规范化读写:解决乱码问题
//在写入和读取的如果编码不一致的话 就会导致乱码问题
//再写入时 是通过流写入的
//XMLWriter writer=new XMLWriter(new FileWriter("JavaWeb2/src/student_copy.xml"),format);
//===========================================>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
// XMLWriter writer=new XMLWriter(new OutputStreamWriter(new FileOutputStream("JavaWeb2/src/student——copy.xml"),"UTF-8"),format);
//读取: <?xml version="1.0" encoding="UTF-8"?>
//读取 : format.setEncoding("UTF-8"); 设置解码方式
//简单的解决方式 : 用字节流写入 不用字符流
//XMLWriter writer=new XMLWriter(new FileOutputStream("JavaWeb2/src/student_copy.xml"),format);
public class DOM4J_4
{
//增加一个学生 itcast_0003 杰克 20
public static void main(String[] args) throws DocumentException, IOException {
//创建解析器
SAXReader reader = new SAXReader();
//使用解析器加载文档
Document document = reader.read(new File("JavaWeb2/src/student.xml"));
//获得根元素
Element root=document.getRootElement();
//为根元素添加student 子元素和属性
Element studentEle= root.addElement("student").addAttribute("number","itcast_0003");
//为student添加name age sex 子元素和内容
studentEle.addElement("name").addText("杰克");
studentEle.addElement("age").addText("20");
studentEle.addElement("sex").addText("male");
//回写:
// 创建格式化器
OutputFormat format=OutputFormat.createPrettyPrint();
//创建写入器
XMLWriter writer=new XMLWriter(new OutputStreamWriter(new FileOutputStream("JavaWeb2/src/student_copy.xml"),"UTF-8"),format);
//将文档写入文件
writer.write(document);
//关闭资源
writer.close();
}
}
借助xpath表达式解析:
public class DOM4J_5
{
public static void main(String[] args) throws DocumentException, IOException {
//创建解析器
SAXReader reader = new SAXReader();
//使用解析器加载文档
Document document = reader.read(new File("JavaWeb2/src/student.xml"));
//新的方式
//在此之前 必须添加在DOM4J框架lib目录下的jaxen-1.1-beta-6.jar包
//创建xpath表达式
String xpath="//student[@number='it_cast_0001']";
//根据xpath找到要删除的元素
Element stuEle= (Element) document.selectSingleNode(xpath);
//删除
stuEle.getParent().remove(stuEle);
//回写:
// 创建格式化器
OutputFormat format=OutputFormat.createPrettyPrint();
//创建写入器
XMLWriter writer=new XMLWriter(new OutputStreamWriter(new FileOutputStream("JavaWeb2/src/student.xml"),"UTF-8"),format);
//将文档写入文件
writer.write(document);
//关闭资源
writer.close();
}
}
Sax解析:
实现接口:
//DefaultHandler类实现了ContentHandler接口 这里覆盖里面 需要的方法
public class MyDefaultHandler extends DefaultHandler {
@Override
public void startDocument() throws SAXException {
super.startDocument();
System.out.println("文档解析开始");
}
@Override
public void endDocument() throws SAXException {
super.endDocument();
System.out.println("文档解析结束");
}
@Override
//前两个参数永远为空
public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
super.startElement(uri, localName, qName, attributes);
System.out.println("当前解析到"+qName+"元素");
if(qName.equals("student")){
String number=attributes.getValue("number");
System.out.println(number);
}
}
@Override
//前两个参数永远为空
public void endElement(String uri, String localName, String qName) throws SAXException {
super.endElement(uri, localName, qName);
System.out.println(qName+"解析结束");
}
@Override
public void characters(char[] ch, int start, int length) throws SAXException {
super.characters(ch, start, length);
String str=new String(ch,start,length);
//过滤空白字符
str=str.trim();
if(str.length()>0){
System.out.println(str);
}
}
}
具体实现:
public class Sax {
public static void main(String[] args) throws ParserConfigurationException, SAXException, IOException {
//获得解析器工厂
SAXParserFactory factory= SAXParserFactory.newInstance();
//获得解析器
SAXParser parser=factory.newSAXParser();
//使用解析器加载xml文档
parser.parse(new File("src/student.xml"),new MyDefaultHandler());
}
}