XML总结

XML总结

​ XMl是一种通用的数据交换格式,全称是Extensible Markup Language(可扩展标记语言),用户可以根据XML规则自定义标签。它可以跨越互联网任何的平台,不受编程语言和操作系统的限制,可以说它是一个拥有互联网最高级别通行证的数据携带者。xml是当前处理结构化文档信息中相当给力的技术,xml有助于在服务器之间穿梭结构化数据,这使得开发人员更加得心应手的控制数据的存储和传输。

XML语法

XML和HTML都是标记语言,它们的区别:

  • xml严格区分大小写
  • xml有且仅有一个根元素,html可以有多个根元素
  • xml属性值必须放在""中,html可以不用
  • xml空格不会自动删除,html空格自动过滤
  • xml标记可以随便定义,且可扩展,html是预定义的

xml的语法格式为:

  • 文档声明:一个完整的xml文件必须包含一个文档声明,且位于文档第一行

    <?xml 版本信息 [编码信息] [文档独立性信息]?>

    例如:<?xml version="1.0" encoding="UTF-8" standalone="yes"?>

  • 元素定义:

    元素一般由开始标记、属性、元素内容、结束标记组成

    例如:<标签></标签>

    空元素可以不使用结束标记:</标签>

  • 属性定义:

    例如:<售价 单位=“元”>68</售价>

  • 注释:

    注释不能出现在xml声明之前,不能出现在标记中,字符串"–“不能出现,不允许以”—>"结尾,不能嵌套使用。

    例如:

  • 特殊字符处理:

特殊字符预定义实体
&&amp;
<&lt;
>&gt;
"&quot;
&apos;

CDATA区

Character Data,指不想被程序解析的一段原始数据。以**"<![CDATA[“开始,以”]]>**"结束

DTD约束

xml文档定义了一套规则对内容进行约束,常用约束有两种:DTD约束和Schema约束。

xml引用外部DTD文件格式:

Java中XML的解析

​ xml解析,即将文件中的内容按照指定的含义进行获取。解析方式有:

  • DOM:基于XML树结构,比较耗资源,适用于多次访问XML。
  • SAX:基于事件,消耗资源小,适用于数据量较大的XML。SAX是Simple API for XML的缩写,它是事件驱动的,它并不需要读入整个文档,而文档的读入过程也就是SAX的解析过程。所谓事件驱动,是指一种基于回调(callback)机制的程序运行方法。
  • JDOM:比DOM更快,使用具体类而不使用接口。
  • DOM4J:非常优秀的Java XML API,性能优异,功能强大的,开放源代码。

下面介绍DOM4J解析xml的一些操作过程,解析xml文档为下面的scores.xml:

<?xml version="1.0" encoding="utf-8"?>
<students>
	<Student>
		<Name>张三</Name>
		<Num>20200718</Num>
		<Classes>0113</Classes>
		<Address>上海外国语</Address>
		<Tel>123456</Tel>
	</Student>
	<Student>
		<Name>王五</Name>
		<Num>20200718</Num>
		<Classes>0114</Classes>
		<Address>上海外国语</Address>
		<Tel>657432</Tel>
	</Student>
</students>

​ 用DO4MJ解析,需要导入相应的jar包。首先获取Document对象,这个对象代表xml文档加载到内存的结果。

public class DOM4J {
	public static void main(String[] args) {
		String path = "src/xml/scores.xml";		
		//打印内容
		print(getDocument(path));
	}
	
	
	/*
	 * 输入Document对象,打印xml文件 
	 */
	public static void print(Document document) {
		if(document == null) {
			return;
		}
		//获取document的根结点
		Element root = document.getRootElement();
		
		//获取子结点列表
		List<Element> list1 = root.elements();
		
		//遍历子结点列表,并打印内容
		for(Element element : list1) {
			System.out.print(element.getName()+" [");
			
			//获取下一级结点的列表并循环打印
			List<Element> list2 = element.elements();
			for(Element e : list2) {
				System.out.print(" "+e.getName()+":"+e.getText()+" ");
			}
			System.out.println("]");
		}
	}	
	/*
	 * 获取指定路径文件的Document对象,并返回
	 */
	public static Document getDocument(String path) {
		//1.指定文件路径  File
		File file = new File(path); 
		Document document = null;
		//2.构建SAXReader对象
		SAXReader reader = new SAXReader();
		try {
			//3.读取Document
			document = reader.read(file);
		} catch (DocumentException e) {
			e.printStackTrace();
		}
		return document;
	}
}

用DOM4J创建一个Document对象,输出到指定路径的xml文件。

public class XMLDom4j {
	public static void main(String[] args) throws IOException {
		String path = "src/food.xml";
		writeXml(path,createDocument());
	}
	/*
	 * 创建一个Document对象,添加内容
	 * <早餐>
	 * 		<包子 单价="元">4</包子>
	 * 		<油条  单价="元">2</油条>
	 * </早餐>
	 */
	public static Document createDocument() {
		//创建Document对象
		Document document = DocumentHelper.createDocument();
		
		//创建根结点
		Element root = document.addElement("早餐");
		
		//创建子结点,链式调用,每个方法返回值都是当前结点
		root.addElement("包子").addText("4").addAttribute("单价", "元"); //addAttribute()第一个为属性名,第二个为值
		root.addElement("油条").addText("2").addAttribute("单价", "元");
		
		return document;
	}
	/*
	 * 指定路径,Document对象,写出一个xml文件
	 */
	public static void writeXml(String path,Document doc) throws IOException {
		//创建输出格式
		OutputFormat format = OutputFormat.createPrettyPrint();
		
		//创建输出流
		XMLWriter out = new XMLWriter(new FileOutputStream(path),format);
		
		//写入
		out.write(doc);
		
		//刷出关闭流
		out.flush();
		out.close();
	}
}

创建结果:

<?xml version="1.0" encoding="UTF-8"?>

<早餐>
  <包子 单价="">4</包子>
  <油条 单价="">2</油条>
</早餐>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值