您的位置 首页 java

java dom dom4j解析xml

xml操作:

xml文件

作用:

格式:良好,有效

java解析xml:

dom sax

dom4j

dom解析:

Document doc=DocumentBuilder.parse(“d:/xx.xml”) ;

Element element=doc.getDocumentElement();

ListNote list=element.notlist(“book”);

dom4j解析:

SaxReader reder = new SaxReader();

Document doc=reder.read(“D:/xx.xml”);

//ClassLoader.getResourceAsInstream(“xx.xml”)(根 扩展 应用)

List<Element> list=doc.elements(“book”);

//xpath //元素名 //元素名/子元素 //元素名【name=”】 //@属性

xml 存储数据

xml:平台无关 语言无关 存储数据的语言

编码格式:gbk 支持中文编码

utf-8 国际通用编码格式

格式良好的xml:

1必须有声明 <?xml version= encoding?>

2 有切只有一个根元素

3 标签对大小写敏感

4 属性值要加””

5 标签必须有开始有结束

6 正确嵌套

有效的xml:

自身携带 dtd

xml 使用schema

dom解析xml的过程

1 创建DocumentBuilderFactory

2 让工厂 DocumentBuilder

3 Document doc=DocumentBuilder.parse(“解析文件”);

4 NodeList list=doc.getElementsByTagName(“元素名”);

5 for(NodeList ){

取出元素

}

6for(NodeList ){

取出元素的属性

子元素

}

dom增加节点:

1 创建DocumentBuilderFactory

2 让工厂 DocumentBuilder

3 Document doc=DocumentBuilder.parse(“解析文件”);

4 Elemenet root =doc.getDocumentElement(); 找到根节点

5 创建节点元素

Element xele= doc.createElemment(“Book”);

ele.setAttribute(“属性名”,”属性值”);

6 创建节点元素的子元素

Element ele= doc.createElemment(“price”);

ele.setTextContent(45);

xele.appendChild(ele);

7 把新创建的节点添加到根元素中,

root.appendChild(xele);

8 内存中的树保存到文件中

TransformerFactory fac = TransformerFactory .newInstancec();

Transformer transform = fac.newTransformer();

transform.transform(new DomSource(doc),new StreamResult(new FileOutputStream(文件)));

dom删除节点:

1 创建DocumentBuilderFactory

2 让工厂 DocumentBuilder

3 Document doc=DocumentBuilder.parse(“解析文件”);

4 查找我要删除的元素

NodeList list=doc.getElementsByTagName(“元素名”);

for(NodeList ){

取出元素

}

5 删除

元素.getParentNode().removeChild(元素);

6 内存中的树保存到文件中

TransformerFactory fac = TransformerFactory .newInstancec();

Transformer transform = fac.newTransformer();

transform.transform(new DomSource(doc),new StreamResult(new FileOutputStream(文件)));

dom修改节点:

1 创建DocumentBuilderFactory

2 让工厂 DocumentBuilder

3 Document doc=DocumentBuilder.parse(“解析文件”);

4 查找我要修改的元素

NodeList list=doc.getElementsByTagName(“元素名”);

for(NodeList ){

取出元素 比较条件

}

5 修改元素

元素.setTextContent();

元素.setAttribute();

6 内存中的树保存到文件中

TransformerFactory fac = TransformerFactory .newInstancec();

Transformer transform = fac.newTransformer();

transform.transform(new DomSource(doc),new StreamResult(new FileOutputStream(文件)));

html 网页展示

xml 存储数据

xml:平台无关 语言无关 存储数据的语言

编码格式:gbk 支持中文编码

utf-8 国际通用编码格式

格式良好的xml:

1必须有声明 <?xml version= encoding?>

2 有切只有一个根元素

3 标签对大小写敏感

4 属性值要加””

5 标签必须有开始有结束

6 正确嵌套

有效的xml:

自身携带dtd

xml 使用schema

dom解析xml的过程

1 创建DocumentBuilderFactory

2 让工厂 DocumentBuilder

3 Document doc=DocumentBuilder.parse(“解析文件”);

4 NodeList list=doc.getElementsByTagName(“元素名”);

5 for(NodeList ){

取出元素

}

6for(NodeList ){

取出元素的属性

子元素

}

dom增加节点:

1 创建DocumentBuilderFactory

2 让工厂 DocumentBuilder

3 Document doc=DocumentBuilder.parse(“解析文件”);

4 Elemenet root =doc.getDocumentElement(); 找到根节点

5 创建节点元素

Element xele= doc.createElemment(“Book”);

ele.setAttribute(“属性名”,”属性值”);

6 创建节点元素的子元素

Element ele= doc.createElemment(“price”);

ele.setTextContent(45);

xele.appendChild(ele);

7 把新创建的节点添加到根元素中,

root.appendChild(xele);

8 内存中的树保存到文件中

TransformerFactory fac = TransformerFactory .newInstancec();

Transformer transform = fac.newTransformer();

transform.transform(new DomSource(doc),new StreamResult(new FileOutputStream(文件)));

dom删除节点:

1 创建DocumentBuilderFactory

2 让工厂 DocumentBuilder

3 Document doc=DocumentBuilder.parse(“解析文件”);

4 查找我要删除的元素

NodeList list=doc.getElementsByTagName(“元素名”);

for(NodeList ){

取出元素

}

5 删除

元素.getParentNode().removeChild(元素);

6 内存中的树保存到文件中

TransformerFactory fac = TransformerFactory .newInstancec();

Transformer transform = fac.newTransformer();

transform.transform(new DomSource(doc),new StreamResult(new FileOutputStream(文件)));

dom修改节点:

1 创建DocumentBuilderFactory

2 让工厂 DocumentBuilder

3 Document doc=DocumentBuilder.parse(“解析文件”);

4 查找我要修改的元素

NodeList list=doc.getElementsByTagName(“元素名”);

for(NodeList ){

取出元素 比较条件

}

5 修改元素

元素.setTextContent();

元素.setAttribute();

6 内存中的树保存到文件中

TransformerFactory fac = TransformerFactory .newInstancec();

Transformer transform = fac.newTransformer();

transform.transform(new DomSource(doc),new StreamResult(new FileOutputStream(文件)));

*******dom4j的解析

1 导入dom4j的jar包

2 组织代码:先创建 SAXReader 对象

SAXReader reader = new SAXReader();

3 用Reader读取xml文件

Document doc=reader.read(“d:/xx.xml”);

4获取根元素

Element root=doc.getRootElemenet();

5 获取要解析的数据元素

List<Element> list=root.elements(“Book”);

6 循环遍历解析list中数据

for(Element e:list)

{

//获得属性

e.attributeValue(“id”)

//获取子元素

e.element(“name”).getText()

}

*******dom4j的增加元素:

1 导入dom4j的jar包

2 组织代码:先创建 SAXReader 对象

SAXReader reader = new SAXReader();

3 用Reader读取xml文件

Document doc=reader.read(“d:/xx.xml”);

4获取根元素

Element root=doc.getRootElemenet();

5 在某元素下增加元素

Element newx=root.addElement(元素名);

6 组织新元素的属性和子元素

newx.addAttribute(属性名,属性值);

Element child=newx.addElement(子元素名);

child.setText(子元素文本);

7保存到文件中

OutputFormat format = OutputFormat.createPrettyPrint();

format.setEncoding(“utf-8”);

XMLWriter writer = new XMLWriter(new FileWriter(“D:/test1.xml”),format);

writer.write(doc);

writer.close();

*******dom4j的修改元素:

1 导入dom4j的jar包

2 组织代码:先创建 SAXReader 对象

SAXReader reader = new SAXReader();

3 用Reader读取xml文件

Document doc=reader.read(“d:/xx.xml”);

4获取根元素

Element root=doc.getRootElemenet();

5 获取要解析的数据元素

List<Element> list=root.elements(“Book”);

6 循环遍历解析list中数据 查找要修改的元素

for(Element ele:list)

if(ele.element(“name”).getText().equals(“酸辣土豆丝”)){

ele.element(“price”).setText(“20”);

ele.element(“desc”).setText(“又酸又辣,很好吃”);

}

7保存到文件中

OutputFormat format = OutputFormat.createPrettyPrint();

format.setEncoding(“utf-8”);

XMLWriter writer = new XMLWriter(new FileWriter(“D:/test1.xml”),format);

writer.write(doc);

writer.close();

*******dom4j的删除元素:

1 导入dom4j的jar包

2 组织代码:先创建 SAXReader 对象

SAXReader reader = new SAXReader();

3 用Reader读取xml文件

Document doc=reader.read(“d:/xx.xml”);

4获取根元素

Element root=doc.getRootElemenet();

5 获取要解析的数据元素

List<Element> list=root.elements(“Book”);

6 循环遍历解析list中数据 查找要删除的元素

for(Element ele:list)

if(ele.element(“name”).getText().equals(“酸辣土豆丝”)){

root.remove(ele); //删除元素

}

7保存到文件中

OutputFormat format = OutputFormat.createPrettyPrint();

format.setEncoding(“utf-8”);

XMLWriter writer = new XMLWriter(new FileWriter(“D:/test1.xml”),format);

writer.write(doc);

writer.close();

xml文件特点

用途

良好的xml:

有效的xml:dtd schema

java解析xml

dom sax(Dom4j)

1xml 介绍

xml 可扩展标记语言

用途 :存储数据 交换数据 配置文件

特点:与语言无关,平台无关,操作系统无关

html 标记语言

展示网页

2xml 格式定义

xml文件有两种:

格式良好:

1 声明 2 有且只有一个根 3 标签大小写敏感 4 标签要有结束 5 嵌套正确

有效的:

有文档类型的定义

dtd schema

3 JAVA读写xml

dom 整棵树放内存中 比较耗资源 多次访问快 JDOM

sax 基于事件,省资源, 适合解析数据量大的xml dom4j

dom读的过程:

dom解析的思路

1 Document BuilderFactory fac = DocumentBuilderFactory.newInstance();

DocumentBuilder db= fac.newDocumentBuilder();

2 Document doc=db.parse(“D:/xx.xml”);

3 找我们需要解析的元素

NodeList list = doc.getElemensByTagName(“元素名”);

4 遍历获得元素信息

for(int i=0li<list.getLength();i++)

{

Node nn= list.item(i);

NodeList childs= nn.getChildNodes();

}

增加的过程

1 DocumentBuilderFactory fac = DocumentBuilderFactory.newInstance();

DocumentBuilder db= fac.newDocumentBuilder();

2 Document doc=db.parse(“D:/xx.xml”);

3 查找要增加元素的父亲元素 father

Elemenet root=doc.getDocumentElement(); 根元素

4 创建元素

Element newEle=doc.createElement(“元素名”);

newEle.setAttribute(属性名,属性值);

Element newchild= doc.createElement(“子元素”);

newchild.setTextContent(文本内容);

newEle.appendChild(newchild);

5 新创建的元素加到树种

father.appendChild(newEle);

6 保存到文件中

Transformer trans = TransformerFactory.newInstance().newTranformer();

trans.setOutputProperty(OutputKeys.ENCODING,”UTF-8″);

DomSource ds = new DomSource(doc);

StreamResult sr = new StreamResult(new FileOutputStream(“D:/xx.xml”));

trans.tranform(ds,sr);

删除的过程

1 DocumentBuilderFactory fac = DocumentBuilderFactory.newInstance();

DocumentBuilder db= fac.newDocumentBuilder();

2 Document doc=db.parse(“D:/xx.xml”);

3 找我们需要解析的元素

NodeList list = doc.getElemensByTagName(“元素名”);

4 遍历查找要删除的元素

for(int i=0li<list.getLength();i++)

{

Node item = list.item(i)

if(符合)

{

item.getParentNode().removeChild(item);

}

}

5 保存到文件中

Transformer trans = TransformerFactory.newInstance().newTranformer();

trans.setOutputProperty(OutputKeys.ENCODING,”UTF-8″);

DomSource ds = new DomSource(doc);

StreamResult sr = new StreamResult(new FileOutputStream(“D:/xx.xml”));

trans.tranform(ds,sr);

修改的过程

1 DocumentBuilderFactory fac = DocumentBuilderFactory.newInstance();

DocumentBuilder db= fac.newDocumentBuilder();

2 Document doc=db.parse(“D:/xx.xml”);

3 找我们需要解析的元素

NodeList list = doc.getElemensByTagName(“元素名”);

4 遍历查找要修改的元素

for(int i=0li<list.getLength();i++)

{

Node item = list.item(i)

if(符合)

{

NodeList list=item.getChildNodes();

for(遍历)

{

if 要修改的子元素

子元素.setTextContent(新值);

}

}

}

5 保存到文件中

Transformer trans = TransformerFactory.newInstance().newTranformer();

trans.setOutputProperty(OutputKeys.ENCODING,”UTF-8″);

DomSource ds = new DomSource(doc);

StreamResult sr = new StreamResult(new FileOutputStream(“D:/xx.xml”));

trans.tranform(ds,sr);

dom4j解析xml:

1 SAXReader reader = new SAXReader();

2 Document doc=reader.read(d:/xx.xml);

3 获取根元素

Element root=doc.getRootElement();

4 找根元素下我需要的子元素

List<Element> list=root.elements(“movie”); //找一组子元素

5 遍历集合类,查看每一个解析到的元素信息

for(Element ele:list)

{

//获得元素属性

String val= ele.attributeValue(“id”)

//子元素

Element name=ele.element(“name”); //找一个子元素

String nn= name.getName();

String val = name.getText();

}

dom4j增加xml:

1 SAXReader reader = new SAXReader();

2 Document doc=reader.read(d:/xx.xml);

3 查找要增加子节点的元素 aa

4 添加新元素 Element newEle=aa.addElement(“新元素名”);

newEle.addAttribute(“id”,”5″);//为新元素添加属性

Element child1= newEle.addElement(“子元素名字”);

child1.setText(子元素的文本内容);

5 字符流 输出流xml 保存修改到文件中

OutputFormate formate = new OutputFormate();

formate.setEncoding(“utf-8”);

XMLWriter writer = new XMLWriter(new FileWriter(“D:/xx.xml”), formate);

writer.write(doc);

writer.close();

dom4j删除xml:

1 SAXReader reader = new SAXReader();

2 Document doc=reader.read(d:/xx.xml);

3 获取根元素

Element root=doc.getRootElement();

4 查找我们要删的元素

for(Iterator<Element> ite= root.elementIterator();ite.hasNext; ){

Element ele= ite.next();

if(ele.attributeValue(“id”).equlas(23))

{

ele.getParent().remove(ele);

}

}

5 字符流 输出流xml 保存修改到文件中

OutputFormate formate = new OutputFormate();

formate.setEncoding(“utf-8”);

XMLWriter writer = new XMLWriter(new FileWriter(“D:/xx.xml”), formate);

writer.write(doc);

writer.close();

dom4修改xml:

1 SAXReader reader = new SAXReader();

2 Document doc=reader.read(d:/xx.xml);

3 获取根元素

Element root=doc.getRootElement();

4 查找我们要改的元素

for(Iterator<Element> ite= root.elementIterator();ite.hasNext; ){

Element ele= ite.next();

if(ele.attributeValue(“id”).equlas(23))

{

ele.element(“name”).setText(新改的值);

}

}

5 字符流 输出流xml 保存修改到文件中

OutputFormate formate = new OutputFormate();

formate.setEncoding(“utf-8”);

XMLWriter writer = new XMLWriter(new FileWriter(“D:/xx.xml”), formate);

writer.write(doc);

writer.close();

xpath:查找xml信息

让程序更有效的操作xml文件

语法:

//元素

//元素/子元素

//@属性

//元素[条件]

文章来源:智云一二三科技

文章标题:java dom dom4j解析xml

文章地址:https://www.zhihuclub.com/188482.shtml

关于作者: 智云科技

热门文章

网站地图