- xml可以自定义标签
- xml语法必须有开始、有结尾
- xml是用来存储数据的,html是用来显示数据的
语法规则:
xml必须有根节点(根节点默认为root)
头声明可有可无
标签成对出现,少一个就会错误
区分大小写
特殊字符使用实体字符:
若想原样存储,使用:<![CDATA[类容]]>
<?xml version="1.0" encoding="UTF-8"?><!-- 头文件 -->
<root><!-- 根标签 -->
<a name="数据数据">
<![CDATA[类容]]>
</a>
</root>
利用java创建xml文件:
首先导入java包:
1链接:https://pan.baidu.com/s/1vsDZiUcIblvZ31xYnFI7cQ
提取码:ydhl
package cml;
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.HTMLWriter;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.XMLWriter;
import java.io.FileWriter;
import java.io.IOException;
/**
* @ClassName NewXml
* @Author 瞿肖
* @Date 2022/7/15 9:24
*/
public class CreateXml {
public static void main(String[] args) {
//创建文档对象
Document doc = DocumentHelper.createDocument();
//创建根目录节点
Element root = DocumentHelper.createElement("root");
//设置元素为根目录
doc.setRootElement(root);
//创建节点
Element book = DocumentHelper.createElement("book");
//添加属性(可有可无)
book.addAttribute("id", "0001");
book.addText("你爹是我");
root.add(book);
//给book添加一个子类
Element voie = DocumentHelper.createElement("voie");
voie.addAttribute("name", "名字");
voie.setText("类容");
book.add(voie);
//创建文件转换对象
OutputFormat format = OutputFormat.createCompactFormat();
format.setEncoding("UTF-8");
XMLWriter writer = null;
try {
//创建文件写入对象
writer = new HTMLWriter(new FileWriter("D:\\我的电脑\\asd\\a.xml"), format);
writer.write(doc);
} catch (IOException e) {
throw new RuntimeException(e);
} finally {
try {
writer.close();
} catch (IOException e) {
throw new RuntimeException(e);
}
}
}
}
创建的时候要注意:父目录.add子目录就可以了。最后将父目录加入到更目录下,最后
使用:
OutputFormat format = OutputFormat.createCompactFormat();
format.setEncoding("UTF-8");
转换格式,在写入
当前格式为编译器默认格式
XMLWriter writer = null;
try {
//创建文件写入对象
writer = new HTMLWriter(new FileWriter("D:\\我的电脑\\asd\\a.xml"), format);
writer.write(doc);
} catch (IOException e) {
throw new RuntimeException(e);
} finally {
try {
writer.close();
} catch (IOException e) {
throw new RuntimeException(e);
}
}
读取xml文件:
package cml;
import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import java.io.FileReader;
import java.util.Iterator;
/**
* @ClassName GetXml
* @Author 瞿肖
* @Date 2022/7/15 10:02
*/
public class GetXml {
public static void main(String[] args) {
SAXReader reader = new SAXReader();
Document doc = null;
try {
// doc = reader.read(new InputSource("D:\\我的电脑\\asd\\a.xml"));
doc = reader.read(new FileReader("D:\\我的电脑\\asd\\a.xml"));
} catch (Exception e) {
throw new RuntimeException(e);
} finally {
doc.clone();
}
get(doc.getRootElement(), 0);
}
public static void get(Element e, int n) {
for (int i = 0; i < n; i++) {
System.out.print("\t");
}
System.out.print("<" + e.getName());
for (Attribute att : e.attributes()) {
//获取全部属性名字和类容
System.out.println(" " + att.getName() + "=" + att.getValue() + ">");
}
if ("".equals(e.getText())) {
System.out.println(">");
} else {
for (int i = 0; i < n; i++) {
System.out.print("\t");
}
System.out.println(e.getText());
}
Iterator<Element> iterator = e.elementIterator();
while (iterator.hasNext()) {
get(iterator.next(), ++n);
n--;
}
for (int i = 0; i < n; i++) {
System.out.print("\t");
}
System.out.println("</" + e.getName() + ">");
}
}
利用递归读取,不懂算法的就有点尴尬了。
利用XPath读取文件:
也要导包哦!
2链接:https://pan.baidu.com/s/1F9ca6xVMt3SYZ2FxXwqFng
提取码:ydhl
package cml;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Node;
import org.dom4j.io.SAXReader;
import java.io.File;
import java.util.List;
/**
* @ClassName NewXpath
* @Author 瞿肖
* @Date 2022/7/15 11:35
*/
public class NewXpath {
public static void main(String[] args) {
SAXReader reader = new SAXReader();
try {
Document doc = reader.read(new File("D:\\我的电脑\\asd\\a.xml"));
//获取目录
List<Node> nodes = doc.selectNodes("/root");
System.out.println(nodes.get(0).getName());
//指定目录
List<Node> nodes1 = doc.selectNodes("/root/book/voie");
System.out.println(nodes1.get(0).getName());
//获取属性
List<Node> idn = doc.selectNodes("//@name");
for (Node node : idn) {
System.out.println(node.getName() + " " + node.getStringValue());
}
} catch (DocumentException e) {
throw new RuntimeException(e);
}
}
}
这个就方便很多哦,