java学习--XML简易学习

可扩展标记性语言

XML存储不同格式;xml是互联网数据传输的重要工具,它可以跨越互联网任何的平台,不受编程语言和操作系统的限制
XML 被设计用来传输和存储数据,其焦点是数据的内容。
主要用于描述数据
使用SAXReader或SAXBuilder对象 读取一个XML文档(Document)
Element对象表示XML节点

xml存储信息以及书写:

<?xml version=”1.0” encoding=”utf-8”>
<Users>
<!-- 注释 -->
<!-- 写在标签内的叫属性  -->
	<user class=”com.gct.XmlStudy.User” id=”user1”>
	<!-- 写在标签之间的是标签内信息 -->
		<id>1001</id>
		<name>zhangsan</name>
		<password>wodegecao</password>
		<money>200000</money>
	</user>
	<user class="com.gct.XmlStudy.User" id="user2">
	    <id>1002</id>
	    <name>lvbu</name>
	    <password>wwwwoooo</password>
	    <money>66666</money>
	</user>
	<user class="com.gct.XmlStudy.User" id="user3">
	    <id>1011</id>
	    <name>diaochan</name>
	    <password>lubddd</password>
	    <money>888888</money>
	</user>
</Users>

解析XML文件

导入jdom.jar 和dom4j .jar 架包来完成xml文件的解析

//使用dem4j  完成文件的解析
Public class Dom4jXML{
   	public static void main(String[] args) {
	   /*
	     1.获取到解析对象SAXReader
	     2.将xml文件转换为流 InputStream
	     3.通过SAXReader从流中读取内容出来转换为(文档Document)
	     4.获取到根元素节点(元素Element)
	     5.通过根节点获取到子节点
	     6.如果有内容就获取,若果有子节点就继续读取
	   */
   	SAXReader sr = new SAXReader();
   
	InputStream in = Dom4jXML.class.getClassLoader().getResourceAsStream("NewFile.xml");
	try {
			Document doc =sr.read(in);
			
			Element root = doc.getRootElement();
			System.out.println("根元素的名称为:"+root.getName());
			//展示所有的节点元素
			List<Element> list =root.elements();
			for (Element el :list ) {
				System.out.println("====>子节点名称"+el.getName());
				//获取属性值
				String attr = el.attributeValue("class");
				System.out.println("\tclass的属性值为:"+attr);
				//另一种获取子节点的方式
				Iterator<Element> it = el.elementIterator();//迭代器
				while(it.hasNext()) {
					Element e = it.next();
					//子节点内容
					System.out.println("==>"+ e.getName());
					if(e.getName().equals("id")) {
						System.out.println("\t\tid 的值为:"+e.getTextTrim());
					}
				}
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
   }
}
//使用jdom来解析XMl文件
public class JDomXML {
	public static void main(String[] args) {
		//获取到解析对象   SAXBuilder
		//文件读取转换流
		//将流转换为document文档
		//获取到根元素
		//获取到到所有子元素(子节点)
		//读取内容
		
		SAXBuilder sb = new SAXBuilder();
		
		InputStream in = JDomXML.class.getClassLoader().getResourceAsStream("NewFile.xml");
		
		try {
			Document doc = sb.build(in);
			
			Element root = doc.getRootElement();
			System.out.println("根节点为:"+root.getName());
			//当getChildern 中设置获取节点名时,会过滤掉其他不是该节点的节点
			List<Element> list = root.getChildren();
			for(Element el:list) {
				System.out.println("====>子节点值为"+root.getName());
				String ass =el.getAttributeValue("class");//获取属性值
				System.out.println("\tclass的属性值:"+ass);
				List<Element> els = el.getChildren();
				for (Element e : els) {
					System.out.println("====>子节点值为"+e.getName());
					//读取内容
					if(e.getName().equals("id")) {
						System.out.println("\t子节点的内容为"+e.getTextTrim());
					}
				}
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		}
}

使用jdom解析xml文件并将内容添加到User中

public class JdomAddUser{
	public static void main(String[] args){
		List<User>  user = new ArrayList<>();//用来存储读取到的user对象
		SAXBuilder sb = new SAXBuilder();//获取到解析对象SAXBuilder
		
		//.getClassLoader()     返回类的类加载器
		//.getResourceAsStram(“NewFile.xml”)  返回用于读取指定资源的输入流.Resource(资源)
		InputStram in = JdomAddUser.class.getClassLoader().getResourceAsStram(“NewFile.xml”);
		try{
			  //通过SAXBuilder 的build 方法获取到输入流的信息,并以document文档存储
			  Document doc = sb.build(in);
			  //获取根
			  Element  root=doc.getRootElement();
			  //获取根节点,并过滤出节点为user的节点
			  List<Element> list = root.getChildren(“user”);
			  for(Element  user:list){
			    //得到节点对应的类,以此可以来进行确认并存储
				      //拼接得到类名
				      //String path = "com.gec.xml."+user.getName().substring(0,1).toUpperCase()+user.getName().substring(1);
					  //通过属性得到类包名,进而可以得到类 (前提是属性中包含包名信息)
					  String path = user.getAttributeValue("class");
				      //通过加载的方法得到类
				      Class clazz = Class.forName(path);
				      Object obj = clazz.newInstance();//.newInstance创建由此 类对象表示的类的新实例。这个实例用来接收获取到的属性
				      List<Element> list1 = user.getChildren();//获取user节点下的所有节点(User的属性)
				      for(Element el:list1){
				      	//节点名是属性名(要看具体的类与xml文件下信息)
				      	Field  field = clazz.getDeclaredField(el.getName());
				        field.setAccessible(true);
				        if(field.getType().getSimpleName().equals("int"))
							field.set(obj, Integer.parseInt(el.getTextTrim()));
						else
							field.set(obj, el.getTextTrim());
					}
					user.add((User)obj);
			}
		}catch(Exception e){
		  e.printStackTrace();
		}
	}
}

将修改的内容写入xml文件中

public class JdomInsertXML {
	public static void main(String[] args) {
		SAXBuilder sb = new SAXBuilder();
		InputStream in = JdomInsertXML.class.getClassLoader().getResourceAsStream("NewFile.xml");
		try {
			Document doc =sb.build(in);
			
			//创建刘的输入对象,添加的节点设置添加格式(format),格式为xml属性格式
			XMLOutputter out = new XMLOutputter(Format.getPrettyFormat());
			
			//获取到要添加的根节点     				我要往哪传
			Element root = doc.detachRootElement();
			
			//准备要添加的节点					我要传什么
			Element newElement = new Element("user");
			//给user节点添加属性		content(内容)
			newElement.setAttribute("class","com.gct.XmlStudy.User");
			newElement.addContent(new Element("id").setText("1011"));
			newElement.addContent(new Element("name").setText("diaochan"));
			newElement.addContent(new Element("password").setText("lubddd"));
			newElement.addContent(new Element("money").setText("888888"));
			
			//将user节点添加到root节点中			将要传的内容传过去   这里添加到的是取出的root节点下,而非元数据
			root.addContent(newElement);
			//将根节点重新放入doc中
			doc.setRootElement(root);
			
			//将更新后的doc重新输出到User.xml中
			out.output(doc, new FileOutputStream("src/NewFile.xml"));
			out.clone();
		} catch (Exception e) {
			e.printStackTrace();
		} 
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值