XML文件

1:什么是xml文件

        xml文件是可扩展性标记语言

        xml作为数据传输,存储和配置文件的一种格式,开发中会大量使用,核心是掌握XML的解析方法

2:特点

        xml文件和操作系统,编程语言的开发平台

        实现不同系统之间的数据交换

3:作用

        数据交换

        配置应用程序和网站

        Ajax基石

4:XML文件解析方法

        DOM解析

                    基于xml文档树结构的解析

                    适合于多次访问的xml文档

                    特点:消耗资源过多

        DOM解析xml文件的步骤:       

                1:  DocumentBuilderFactory dbf= DocumentBuilderFactory .newIstance();                                    创建解析器工厂对象

                2:   DocumentBuilder  db=  dbf.newDocumentBuilder();

                      解析器工厂对象创建解析器对象

                3:   Document document=   db.parse(path);

                      解析器对象指定xml文件创建Document对象

import java.io.IOException;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;

public class Demo01 {

	/**
	 * 将XML文件转换成Document对象
	 * 查询节点数据
	 * DOM解析的特点:
	 * 		1:基于树型结构,通过解析器一次性吧文档加载到内存中去,适合随机读取
	 * 		2:比较灵活,更适合在WEB中开发
	 */
	public static void main(String[] args) {
		
		//创建工厂对象,因为DocumentBuilderFactory是一个抽象类,需要使用方法来声明
		DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();
		
		try {
			//使用方法获得解析器的对象
			DocumentBuilder db=	factory.newDocumentBuilder();
			
			//已经将文件解析成XML文件中,并存储到内存中去(以 树状的形式)
			Document document=db.parse("收藏信息1.xml");
			
			//读取数据,获取元素标签名称
			NodeList n=document.getElementsByTagName("Brand");
			//遍历,循环执行两次
			for (int i = 0; i < n.getLength(); i++) {
				Node node=n.item(i);//XML文件中节点的表达形式,NodeList 接口提供对节点的有序集合的抽象,需要强转为element类型
				Element brand=(Element)node;//强制类型转换为Element
				String nameValue=brand.getAttribute("name");//通过名称获得属性值
				System.out.println(nameValue);

				NodeList childName=brand.getChildNodes();
				//遍历子节点
				for (int j = 0; j < childName.getLength(); j++) {
					Node node1=childName.item(j);//XML文件中节点的表达形式
					
					//判断类型是否相等,只有相等才能进行类型转化
					if(node1.getNodeType()==Node.ENTITY_NODE){
						Element type=(Element)node1;
						String typeValue=type.getAttribute("name");
						System.out.println("\t"+typeValue);
					}
				}
			}
		} catch (ParserConfigurationException e) {
			e.printStackTrace();
		} catch (SAXException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

}

        SAX解析

                        基于事件的解析

                        适用于大数据量的xml文档

                        特点:占用资源少,内存消耗少

        DOM4J解析(使用较多的xml文件解析)

                         非常强大的Java xml API 

                          性能优异,功能强大

                          开放源代码

                DOM4J解析xml文件的步骤:

                        1:SAXReader sr=new SAXReader();

                              创建SAXReader对象

                        2:Docuemnt   doc= sr.read(path);

                              SAXReader创建的对象调用read()方法获取Document数据并存储

                        3:Element root=doc.getRootElement();

                              使用doc调用getRootElement()方法获取xml的根节点

                        4:Iterator iterator= root.elementIterator();

                              存储到迭代器中

                        5:   遍历迭代器

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Iterator;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
import org.dom4j.Element;

public class dom4jParseXML {
	public static Document doc;
	
	public static void main(String[] args){
		loadDocument();
//		showPhoneInfo();
//		addNewPhoneInfo();
		updatePhoneInfo();
//		deleteItem();
		showPhoneInfo();
	}

	//读取xml文件 
	public static void loadDocument(){
			try {
				SAXReader saxReader=new SAXReader();
				doc=saxReader.read(new File("收藏信息1.xml"));
			} catch (DocumentException e) {
				e.printStackTrace();
			}
	}
	
	//获取文件信息
	public static void showPhoneInfo(){
		//获取根节点
		Element root=doc.getRootElement();
		//遍历根节点的所有子元素--遍历所有的brand标签
		for (Iterator itBrand=root.elementIterator();itBrand.hasNext();) {//得到迭代器放到itBrand中去
			Object object=itBrand.next();
			Element brand=(Element)object;
			System.out.println("品牌: "+brand.attributeValue("name"));
			//遍历type便签
			Iterator itType=brand.elementIterator();
			while(itType.hasNext()){
				Element type=(Element)itType.next();
				System.out.println("\t型号"+type.attributeValue("name"));
			}
		}
	}
	
	//找到需要修改的节点
	public static void updatePhoneInfo(){
		//获取根节点
		Element root=doc.getRootElement();
		Iterator itBrand=root.elementIterator();
		int id=0;
		while(itBrand.hasNext()){
			Element brand=(Element)itBrand.next();
			if(brand.attributeValue("name").equals("小米")){
				brand.addAttribute("name", "oppo");
			}
		}
		saveXML("收藏信息1.xml");
	}
	
	//删除节点
	public static void deleteItem(){
		//获取根节点
		Element root=doc.getRootElement();
		Iterator itBrand=root.elementIterator();
		while(itBrand.hasNext()){
			Element brand=(Element)itBrand.next();
			if(brand.attributeValue("name").equals("小米")){
				//删除节点需要通过调用父节点来删除子节点
				brand.getParent().remove(brand);
			}
		}
	}
	
	//存储xml文件
	public static void saveXML(String path){
		try {
			OutputFormat format=OutputFormat.createPrettyPrint();
			format.setEncoding("GBK"); // 指定XML编码
			//将Writer对象或OutputStream对象作为目标,那么您可以使用XMLWriter该类
			XMLWriter xw=new XMLWriter(new FileWriter(path),format);
			xw.write(doc);
			xw.close();
		} catch(IOException e) {
			e.printStackTrace();
		}
		
	}
	
	//添加一个节点
	public static void addNewPhoneInfo(){
		//获取根节点
		Element root=doc.getRootElement();
		//添加节点
		Element brand=root.addElement("Brand");
		brand.addAttribute("name", "小米");
		//再添加子节点
		Element type=brand.addElement("Type");
		type.addAttribute("name","小米5.0");
		
		saveXML("收藏信息1.xml");
	}
}

收藏信息1.xml

<?xml version="1.0" encoding="GBK"?>

<PhoneInfo> 
  <Brand name="华为"> 
    <Type name="U8650"/>  
    <Type name="HW123"/>  
    <Type name="HW321"/> 
  </Brand>  
  <Brand name="苹果"> 
    <Type name="iPhone4"/> 
  </Brand>  
  <Brand name="oppo"> 
    <Type name="小米5.0"/> 
  </Brand> 
</PhoneInfo>

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
XML文件是一个包含数据的纯文本文件,其中的数据按照一定的格式和规则进行组织和描述,常用于数据交换和数据存储。XML文档则是一个符合XML语法规则的文件,它包含一个根元素和一些子元素,有明确定义的结构和语义。 下面是一个简单的XML文件的例子: ``` <?xml version="1.0" encoding="UTF-8"?> <books> <book> <title>Java编程思想</title> <author>Bruce Eckel</author> <price>99.00</price> </book> <book> <title>Python核心编程</title> <author>Wesley Chun</author> <price>68.00</price> </book> </books> ``` 这个XML文件描述了一些书籍的信息,包括书名、作者和价格等。它包含一个根元素 `books`,下面有两个子元素 `book`,每个 `book` 元素又包含了三个子元素 `title`、`author` 和 `price`。 如果要将这个XML文档转化为完整的XML文件,可以将它保存到一个文件中,例如 `books.xml`: ``` <?xml version="1.0" encoding="UTF-8"?> <books> <book> <title>Java编程思想</title> <author>Bruce Eckel</author> <price>99.00</price> </book> <book> <title>Python核心编程</title> <author>Wesley Chun</author> <price>68.00</price> </book> </books> ``` 这个文件和XML文档是一样的,只不过去掉了XML声明 `<?xml version="1.0" encoding="UTF-8"?>`,因为它在这里不是必需的。如果需要在程序中解析这个XML文件,可以使用XML解析库,例如Python中的 `xml` 模块,在程序中读取和处理其中的数据。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值