浅析 xml 数据格式文件

浅析 xml 数据格式文件

xml ( Extensible Markup Language ) 全称 -> 可拓展的标记语言;

        xml文件的主要用途:xml文件主要用于数据的 传输 和 存储,并不是展示;

        xml标签与html的区别:节点的标签使用方式和 html 十分相似,不同的是 xml 中的标签需要自定义;且语法相较于html来说更加严格(必须是成对标签,且区分大小写);

        语法注意:xml 文件节点最外层必须是 root 根节点 当然根节点不一定非得命名为 root,也可以是其他的自定义名称,但是一般来说大家都默认定义根节点为 root ];

这是一个简单的 xml 文件,如下所示 ->

<?xml version="1.0" encoding="utf-8" ?>
<root>
    <name>澜色海湾</name>
    <age>22</age>
</root>

        从语法上来说 -> 头声明可写可不写,不影响;

        但是我还是建议大家写上 -> 因为头文件里面有一个 encoding 属性非常重要,这让我们在获取这些数据的时候知道应该用什么编码格式去读取他;

xml文件中,节点的内容如果带有特殊符号的话 ->

<?xml version="1.0" encoding="utf-8" ?>
<root>
    <calculate>6 < 9</calculate>
    <calculate>6 &lt; 9</calculate><!--应该用这种形式-->
</root>

        如上述代码所示 -> 当我们 xml 节点内容中需要用到特殊字符例如 "<" (小于号) 时,必须要用实体转义字符;

        假设我们用浏览器去读取 xml 中的内容,当浏览器读到 "<" 时会认为后面是标签名,实际上并不是标签,而是节点内容,就会出错;

        当然字符替换为转义字符的这种解决方式,适用于特殊字符较少时;
        如果特殊字符很多很多 -> 那么替换起来就会十分麻烦,我们可以采用 <![CDATA[内容]]> 的方式定义节点内容,这样浏览器就不会解析节点中的内容,而是原模原样的将节点内容打印展示出来 -> 如下所示 ;

<?xml version="1.0" encoding="utf-8" ?>
<root>
    <msg><[!CDATA[2 < 8 , 9  > 6 , 99 < 100]]></msg>
</root>

下面给大家罗列出在xml中需要转义的字符 ->

Original characterEscaped character
<&lt;
>&gt;
&&amp;
'&apos;
"&quot;

        Java 解析 xml 文件数据有四种方式,这里我用 dom 方式解析 xml 文件数据,代码如下所示 ->

        在 xml 中有三种最常用的节点类型,分别是 Element(元素节点)Attribute(属性结点)Text(文本节点)

student.xml文件如下所示 ->

<?xml version="1.0" encoding="utf-8" ?>
<root>
    <student>
        <name>澜色海湾</name>
        <age>22</age>
    </student>
    <student>
        <name>托尼</name>
        <age>16</age>
    </student>
    <student>
        <name>安妮</name>
        <name>18</name>
    </student>
</root>

AnalisysXmlFileData.java文件如下所示 ->

public class AnalisysXmlFileData {

    public static void analisysFileData() {
        try {
            DocumentBuilder documentBuilder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
            //xml文件绝对路径
            Document parse = documentBuilder.parse("src/com/hkl/xmlFileAnalisys/student.xml");
            //获取名称为 root 的节点
            NodeList nodeList = parse.getElementsByTagName("root");
            for(int i = 0;i < nodeList.getLength();i++) {
                //获取第 i 个 root 节点
                Node rootNode = nodeList.item(i);
                //获取 root 节点中的所有子节点
                NodeList studentList = rootNode.getChildNodes();
                for(int j = 0;j < studentList.getLength();j++) {
                    //获取第 j 个子节点
                    Node student = studentList.item(j);
                    //获取子节点中所有的子节点
                    NodeList chlidNodeList= student.getChildNodes();
                    for(int k = 0;k < chlidNodeList.getLength();k++) {
                        //获取子节点中的第 k 个节点
                        Node stuAttr = chlidNodeList.item(k);
                        //如果该结点为 Element 节点
                        if(stuAttr.getNodeType() == Node.ELEMENT_NODE) {
                            System.out.println(stuAttr.getNodeName()+" = "+stuAttr.getFirstChild().getNodeValue());
                        }
                    }
                }
            }
        }catch(Exception e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        analisysFileData();
    }

}

输出结果如下所示 ->

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值