总结
XML
- XMl:用于数据交互的一种格式
- 语法格式:
- 注释不能放在第一行(ctrl+shift+c)
- 文档申明放第一行(版本号和字符集)
- 严格区分大小写
- 只能有一个根标签
- 一个标签不能有两个一样的标签
- 标签不能嵌套,就是不能开始和结束不在同一个标签里
- 标签的名字不能有空格(还有;)(名字不能用xml等保留字)
- 标签名以字母和下划线开始(不推荐下划线)
- 关于特殊字符的处理方式:
- <![CDATA[文本]]>
- < <
- > >
- 语法格式:
XML解析
package cn.itsource1.parseXML;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.List;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
/**
* @author 13454
* 解析XML
* 需要用到第三方:dom4j
*/
public class ParseXMLTest {
//设置在这里是为了大家都可以使用
File file;
Document doc;
Element root;
//初始化获取根节点
@Before
public void init() throws Exception{
file = new File("src/cn/itsource1/parseXML/crud.xml");
//第三方自带的输入流类
SAXReader reader = new SAXReader();
//获取xml文件对象
doc = reader.read(file);
//通过xml文件对象获取根节点对象
root = doc.getRootElement();
}
//结束输出
@After
public void end() throws Exception{
//第三方自带的类,用于漂亮打印
OutputFormat prettyPrint = OutputFormat.createPrettyPrint();
//第三方自带的类,用于输出
XMLWriter xmlWriter = new XMLWriter(new FileWriter(file),prettyPrint);
//传入doc对象输出
xmlWriter.write(doc);
xmlWriter.close();
}
//删除元素
@Test
public void delEle(){
//通过调用父类删除自己
List<Element> list = root.elements();
Element body = list.get(2);
body.getParent().remove(body);
}
//修改元素
@Test
public void update(){
//通过集合获取子节点,然后修改文本
List<Element> list = root.elements();
Element body = list.get(2);
Element name = body.element("name");
name.setText("小芳");
}
//增加元素
@Test
public void add(){
//获取body子节点
Element body = root.addElement("body");
//body下添加子节点并添加文本
body.addElement("name").addText("小红");
body.addElement("age").addText("24");
body.addElement("sex").addText("女");
body.addElement("height").addText("1.60");
body.addElement("weight").addText("90");
}
//查找元素
@Test
public void findEle(){
//获取根节点下面的所有子节点
List<Element> list = root.elements();
list.stream().forEach(System.out::println);
//获取索引为1的子节点
Element body = list.get(1);
//获取body下面的所有子节点
List bodylist = body.elements();
bodylist.stream().forEach(System.out::println);
//获取body下面的name子节点
Element name = body.element("name");
//获取name的文本
String nameText = name.getText();
System.out.println(nameText);
//获取age的文本
String ageText = body.element("age").getTextTrim();
System.out.println(ageText);
}
}
XPath: 通过xpath可以不用从根路径开始找,可以直接通过路径