Java操作XML⽂件及转义字符
XML转义字符:
eg:
实体必须以符号"&"开头,以符号";"结尾。
转载1:
⽬录
Java中有两种解析XML⽂件的⽅式:DOM解析和SAX解析。
⼀、使⽤DOM4j进⾏XML的DOM解析
DOM解析是⼀次性将整个XML⽂档加载进内存,在内存中构建Document的对象树,通过Document对象,得到树上的节点对象,通过节点对象访问(操作)到XML⽂档的内容。
通常使⽤Dom4j⼯具进⾏XML的DOM解析,⾸先要到Dom4j的官⽹下载包并加载到IDE开发⼯具中(例如eclipse)。
1.1、使⽤DOM4j查询XML⽂档
XML⽂档在DOM解析中可以被映射为多种节点,其中⽐较重要和常见的是元素节点(Element)、属性节点(Attribute)和⽂本节点(Text)。
查询节点主要可以使⽤以下⽅法:
Document new SAXReader().read(File file)    ——    读取XML⽂档
RootElement()    ——    获取XML⽂档的根元素节点
deIterator()    ——    获取当前元素节点下的所有⼦节点
Iterator<Element> Element.elementIterator(元素名)    ——    指定名称的所有⼦元素节点
Iterator<Attribute> Element.attributeIterator()    ——    获取所有⼦属性节点
List<Element> Element.elements()    ——    获取所有⼦元素节点
List<Attribute> Element.attributes()    ——    获取所有⼦属性字节
Element Element.element(元素名)    ——    指定名称的第⼀个⼦元素节点
Attribute Element.attribute(属性名)    ——    获取指定名称的⼦属性节点
String Element.attributeValue(属性名)    ——    获取指定名称的⼦属性的属性值
Name()    ——    获取属性名称
Value()    ——    获取属性值
Text()    ——    获取当前元素节点的⼦⽂本节点
String Element.elementText(元素名)    ——    获取当前元素节点的指定名称的⼦⽂本节点    ⽰例:在eclipse中读取以下l⽂档的内容,并打印⾄控制台
<?xml version="1.0" encoding="UTF-8"?>
<Students>
<Student id="001">
<name>张三</name>
<age>19</age>
<gender>男</gender>
<grade>计算机1班</grade>
</Student>
<Student id="002">
<name>李四</name>
<age>20</age>
<gender>男</gender>
<grade>计算机2班</grade>
</Student>
</Students>
package xml;
import java.io.File;
import java.util.List;
import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
public class ReadAndPrintXML {
public static void main(String[] args) throws Exception {
// 创建⼀个XML解析器对象
SAXReader reader = new SAXReader();
// 读取XML⽂档,返回Document对象
Document document = ad(new File("E:\\xml\\l"));
// 获取根元素节点
Element root = RootElement();
StringBuilder sb = new StringBuilder();
recursion(root, sb);
System.out.String());
}
private static void recursion(Element ele, StringBuilder sb) {
sb.append("<");
// 解析元素节点
sb.Name());
// 解析属性节点
List<Attribute> attributes = ele.attributes();
for(Attribute attribute : attributes) {
sb.append(" ");
sb.Name());
sb.append("=");
sb.Value());
}
sb.append(">");
// 解析⽂本节点
sb.Text());
// 递归解析元素节点
List<Element> elements = ele.elements();
for(Element element : elements) {
recursion(element, sb);
}
java xml是什么sb.append("<" + Name() + "/>\n");
}
}
1.2、使⽤DOM4j修改XML⽂档
①写出内容到xml⽂档
XMLWriter writer = new XMLWriter(OutputStream out, OutputFormat format)    writer.write(Document doc)
上⾯的OutputFormat对象可以由OutputFormat类的两个静态⽅法来⽣成:
createPrettyPrint()    ——    ⽣成的OutputFormat对象,使写出的XML⽂档整齐排列,适合开发环境使⽤createCompactFormat()    ——    ⽣成的OutputFormat对象,使写出的XML⽂档紧凑排列,适合⽣产环境使⽤    ②⽣成⽂档或增加节点
ateDocument()    ——    ⽣成⼀个新的XML Document对象
Element Element.addElement(元素节点名)    ——    增加⼀个⼦元素节点
Attribute Element.addAttribute(属性名,属性值)    ——    增加⼀个⼦属性节点
③修改节点
Attribute.setValue(属性值)    ——    修改属性节点值
Attribute Element.addAttribute(同名属性名,属性值)    ——    修改同名的属性节点值
Element.setText(内容)    ——    修改⽂本节点内容
④删除节点
Element.detach()    ——    删除元素节点
Attribute.detach()    ——    删除属性节点
⽰例:⽣成⼀个和前⾯的l⼀样的XML⽂档,并写⼊到磁盘
import java.io.FileOutputStream;
import java.io.UnsupportedEncodingException;
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.XMLWriter;
public class WriteXML {
public static void main(String[] args) throws Exception {
/
/ 创建⼀个XMLWriter对象
OutputFormat format = atePrettyPrint();
XMLWriter writer = new XMLWriter(new FileOutputStream("E:\\xml\\l"), format);
// ⽣成⼀个新的Document对象
Document doc = ateDocument();
// 增加Students元素节点
Element students = doc.addElement("Students");
// 增加两个Student元素节点
Element student1 = students.addElement("student");
Element student2 = students.addElement("student");
// 为两个Student元素节点分别增加id属性节点
student1.addAttribute("id", "001");
student2.addAttribute("id", "002");
// 分别增加name, age, gender, grade元素⼦节点
student1.addElement("name").setText("张三");
student1.addElement("age").setText("19");
student1.addElement("gender").setText("男");
student1.addElement("grade").setText("计算机1班");
student2.addElement("name").setText("李四");
student2.addElement("age").setText("20");
student2.addElement("gender").setText("男");
student2.addElement("grade").setText("计算机2班");
/
/ 将Document对象写⼊磁盘
writer.write(doc);
writer.close();
}
}
1.3、使⽤xPath技术
使⽤dom4j查询⽐较深的层次结构的节点时,⽐较⿇烦,因此可以使⽤xPath技术快速获取所需的节点对象。    ⾸先也需要在eclipse中导⼊xPath的jar包,我这⾥使⽤的是jaxen-1.1-beta-6.jar
①使⽤xPath的⽅法
List<Node>  Document.selectNodes(xpath表达式)    ——    查询多个节点对象
Node  Document.selectSingleNode(xpath表达式)    ——    查询⼀个节点对象
②xPath表达式语法
/    ——    绝对路径,表⽰从xml⽂档的根位置开始
//    ——    相对路径,表⽰不分任何层次结构的选择元素
*    ——    表⽰匹配所有元素
[]    ——    条件,表⽰选择符合条件的元素
@    ——    属性,表⽰选择属性节点
and    ——    关系,表⽰条件的与关系
text()    ——    ⽂本,表⽰选择⽂本内容

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。