XML和JSON基础

XML

XML(EXtensible Markup Language):可扩展标记语言。XML与操作系统、编程语言的开发平台无关,能够用于实现不同系统之间的数据交换。

XML的作用

①数据交互
②配置应用程序和网站
③Ajax基石

XML文档结构

XML文档结构:
1.声明 一般是XML文档的第一行
2.文档描述信息
声明的组成:
version:文档符合xml1.0规范
encoding:文档字符编码,默认为UTF-8
文档结构解释:
根元素:只有一个
根元素的开始标签:放在最前面
根元素的结束标签:放在最后面
标签内容在开始标签和结束标签之间

XML标签

XML文档内容由一系列标签元素组成
<元素名 属性名=“属性值”>元素内容</元素名>
注意:
属性值用双引号包裹
一个元素可以有多个属性
属性值中不能直接包含<、“、&
不建议使用的字符:‘、>

XML编写注意事项

①所有XML元素都必须有结束标签
②XML标签对大小写敏感
③XML必须正确的嵌套
④同级标签以缩进对齐
⑤元素名称可以包含字母、数字或其他的字符
⑥元素名称不能以数字或者标点符号开始
⑦元素名称中不能含空格
示例
将表中的数据用XML文档表示出来

学生姓名预计得分实际得分
王显明7580
宋佳75

88

<?xml version="1.0" encoding="UTF-8" ?>
<students>
    <student>
        <name>王明显</name>
        <guessScore>75</guessScore>
        <realScore>80</realScore>
    </student>
    <student>
        <name>宋佳</name>
        <guessScore>75</guessScore>
        <realScore>88</realScore>
    </student>
</students>

XML解析器

解析器类型
①非验证解析器:检查文档格式是否良好
②验证解析器:使用DTD检查文档的有效性

解析XML技术

①DOM
基于XML文档树结构的解析
适用于多次访问的XML文档
特点:比较消耗资源
②SAX
基于事件的解析
适用于大数据量的XML文档
特点:占用资源少,内存消耗小
③DOM4J
非常优秀的Java XML API
性能优异、功能强大
开放源代码

DOM解析XML

**DOM:**文档对象模型(Document Object Model),DOM把XML文档映射成一个倒挂的树。

<book >
    <title>三国演义</title>
    <author>罗贯中</author>
    <price>30元</price>
</book>

常用接口介绍

常用接口常用方法说明
Document:表示整个 XML 文档NodeList getElementsByTagName(String Tag)按文档顺序返回文档中指定标记名称的所有元素集合
Node:该文档树中的单个节点NodeList getChildNodes()获取该元素的所有子节点,返回节点集合
Element:XML 文档中的一个元素String getTagName()获取元素名称

 

java代码对xml文件的查看与增加

DOM解析XML文件步骤:
①创建解析器工厂对象
②解析器工厂对象创建解析器对象
③解析器对象指定XML文件创建Document对象
④以Document对象为起点操作DOM树
保存xml文件步骤
①获得TransformerFactory对象
②创建Transformer对象
③创建DOMSource对象(包含XML信息)
④设置输出属性:编码格式
⑤创建StreamResult对象(包含保存文件的信息)
⑥将XML保存到指定文件中

直接上代码:

// 新建phone.xml
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<phoneInfo>
    <brand name="华为">
        <type name="p30"/>
        <type name="mate30"/>
        <type name="p40pro"/>
    </brand>
    <brand name="苹果">
        <type name="iphone11p"/>
        <type name="iphoneX"/>
    </brand>
<brand name="三星">
        <type name="note20"/>
    </brand>
</phoneInfo>
public class TestXML {
    public static void main(String[] args) throws ParserConfigurationException, IOException, SAXException {
    	// 创建解析器工厂对象
        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
        // 创建解析器对象
        DocumentBuilder db =  dbf.newDocumentBuilder();
        // 解析器对象指定XML文件创建Document对象
        Document document = db.parse("phone.xml");
        // 获取node列表
        NodeList brand = document.getElementsByTagName("brand");
        // 遍历node
        for (int i = 0; i < brand.getLength(); i++) {
            Node item = brand.item(i);
            Element e = (Element)item;
            // 获取当前节点的name属性值
            System.out.println(e.getAttribute("name"));
            // 获取子节点
            NodeList type = e.getElementsByTagName("type");
            // 遍历子节点
            for (int j = 0; j < type.getLength(); j++) {
                Node item1 = type.item(j);
                Element e2 =(Element)item1;
                // 输出type子节点的name属性值
                System.out.println(e2.getAttribute("name"));
            }
        }
        // 增加一个brand节点
       	// 获取根节点
        Node root = document.getElementsByTagName("phoneInfo").item(0);
        // 创建一个brand节点
        Element sx = testXML.document.createElement("brand");
        // 设置brand节点的name属性
        sx.setAttribute("name","三星");
        // 创建type节点
        Element sxType = testXML.document.createElement("type");
        // 设置type节点的name属性
        sxType.setAttribute("name","note20");
        // 将type节点追加到brand节点中
        sx.appendChild(sxType);
        // 将brand节点追加到根节点
        root.appendChild(sx);
        // 保存更改
        // 获得TransformerFactory对象
        TransformerFactory tf =TransformerFactory.newInstance();
        // 设置缩进
        tf.setAttribute("indent-number",4);
        Transformer t =tf.newTransformer();
        t.setOutputProperty(OutputKeys.INDENT,"yes");// 换行
        t.setOutputProperty(OutputKeys.ENCODING,"utf-8");//标注字符编码
        DOMSource source = new DOMSource(document);
        // 输出流写入xml文件
        FileOutputStream fos = new FileOutputStream("phone.xml");
        StreamResult sr = new StreamResult(new OutputStreamWriter(fos));// 只有用writer才能缩进
        t.transform(source,sr);
	}        
]

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值