XML
可拓展标记语言 eXtensible Markup Language
点击查看学习视频
基本文法
- 有且仅有一个根元素
- 标签是成对的,并且要正确嵌套:
<people> <name>paz</name></people>
- xml为大小写敏感的
- XML声明:版本以及编码
<?xml version="1.0" encoding="UTF-8"?>
- 注释:
<!--注释信息-->
- 属性:用于描述标签,要有双引号
<a id="">
DTD
Document Type Definition 文档类型定义,用于约束xml文档格式
内部DTD
- 语法:
<!DOCTYPE 根元素 [元素声明]>
- 元素声明
<!ELEMENT 元素名 (子元素[,子元素...])>
- 数量词
a) + :至少一次
b) ? :至多一次
c) * :任意次 - 属性声明
<!ATTLIST 元素名称 属性名 属性类型 默认值>实例:student标签的id属性为字符数据(CDATA),且必须出现<!ATTLIST student id CDATA #REQUIRED>
- 元素内容类型限制
<!ELEMENT 元素名 (元素类型)>
外部DTD
需要通过<!DOCTYPE 根元素 SYSTEM "文件"> 引入*.dtd文件
- dtd文件,对空格要求严格
解析XML(DOM4J)
DOM For Java
读取
xml文件
<scores> <student id="1"> <name>汉三</name> <course>java</course> <score>99</score> </student> <student id="2"> <name>李四</name> <course>java</course> <score>99</score> </student></scores>
java文件
package study.xml;import java.io.File;import java.util.Iterator;import org.dom4j.Attribute;import org.dom4j.Document;import org.dom4j.DocumentException;import org.dom4j.Element;import org.dom4j.io.SAXReader;public class XML_01 { public static void main(String[] args) throws Exception { //创建SAXReader对象 SAXReader reader=new SAXReader(); //获取Document对象 Document doc=reader.read(new File("src/scores.xml")); //获取根元素 Element root=doc.getRootElement(); System.out.println(root.getName()); //获取根元素下所有子元素 Iterator<Element> it=root.elementIterator(); while(it.hasNext()) { //取出元素 Element element=it.next(); System.out.println(element.getName()); //获取id属性 Attribute attribute_id=element.attribute("id"); System.out.println("id:"+attribute_id.getValue()); //获取特定子元素 Element name=element.element("name"); Element course=element.element("course"); Element score=element.element("score"); System.out.println(name.getName()+"="+name.getStringValue()); System.out.println(course.getName()+"="+course.getText()); System.out.println(score.getName()+"="+score.getStringValue()); System.out.println("---------------------------------------------------------"); } }}
写入
java文件
package study.xml;import java.io.File;import java.io.FileWriter;import java.io.IOException;import java.io.Writer;import org.dom4j.Document;import org.dom4j.DocumentHelper;import org.dom4j.Element;import org.dom4j.io.OutputFormat;import org.dom4j.io.XMLWriter;public class XML_02 { public static void main(String[] args) throws Exception { //通过DocumentHelper生成Document对象 Document document=DocumentHelper.createDocument(); //添加根元素(并得到元素) Element element_root=document.addElement("scores"); //添加子元素 Element element_student1=element_root.addElement("student"); //添加属性 (返回的依旧是element_root对象,方便链式编程) element_student1.addAttribute("id", "1"); //链式示范 element_root.addElement("student").addAttribute("id", "2"); //添加子元素 Element name=element_student1.addElement("name"); Element score=element_student1.addElement("score"); Element course=element_student1.addElement("course"); //为子元素添加文本 name.addText("张三"); score.addText("89"); course.addText("高数"); //简单输出 //输出至XML_03文件 Writer writer=new FileWriter(new File("src/XML_Write.xml")); document.write(writer); //关闭资源 writer.close(); //格式良好的输出(不会挤到一起) OutputFormat format=OutputFormat.createPrettyPrint(); Writer writer_format=new FileWriter(new File("src/XML_Write_format.xml")); XMLWriter writer_XML=new XMLWriter(writer_format, format); writer_XML.write(document); writer_XML.close(); }}