• XML的DOM解析 Java实现 例子二


     

    XML的DOM解析 Java实现 例子二

      关于节点的getNodeName()getNodeValue()方法能得到什么值,可以查看Node类的官方文档:

      http://docs.oracle.com/javase/7/docs/api/org/w3c/dom/Node.html

      The values of nodeNamenodeValue, and attributes vary according to the node type as follows:

     

    Interface

    nodeName

    nodeValue

    attributes

    Attr

    same as Attr.name

    same as Attr.value

    null

    CDATASection

    "#cdata-section"

    same as CharacterData.data, the content of the CDATA Section

    null

    Comment

    "#comment"

    same as CharacterData.data, the content of the comment

    null

    Document

    "#document"

    null

    null

    DocumentFragment

    "#document-fragment"

    null

    null

    DocumentType

    same as DocumentType.name

    null

    null

    Element

    same as Element.tagName

    null

    NamedNodeMap

    Entity

    entity name

    null

    null

    EntityReference

    name of entity referenced

    null

    null

    Notation

    notation name

    null

    null

    ProcessingInstruction

    same as ProcessingInstruction.target

    same as ProcessingInstruction.data

    null

    Text

    "#text"

    same as CharacterData.data, the content of the text node

    null

      See also the Document Object Model (DOM) Level 3 Core Specification.

     

    例子程序

      首先是XML文档如下:

    <?xml version="1.0" encoding="UTF-8"?>
    <学生名册 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="C:\Course30\student.xsd">
        <学生 学号="1">
            <姓名>张三</姓名>
            <性别></性别>
            <年龄>20</年龄>
        </学生>
        <学生 学号="2">
            <姓名>李四</姓名>
            <性别></性别>
            <年龄>19</年龄>
        </学生>
        <学生 学号="3">
            <姓名>王五</姓名>
            <性别></性别>
            <年龄>21</年龄>
        </学生>
    </学生名册>

      然后是Java程序: 

    package com.learnjava.xml.dom;
    
    import java.io.File;
    
    import javax.xml.parsers.DocumentBuilder;
    import javax.xml.parsers.DocumentBuilderFactory;
    
    import org.w3c.dom.Document;
    import org.w3c.dom.Element;
    import org.w3c.dom.NamedNodeMap;
    import org.w3c.dom.Node;
    import org.w3c.dom.NodeList;
    
    public class DomTest2
    {
        public static void main(String[] args) throws Exception
        {
            DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
    
            DocumentBuilder db = dbf.newDocumentBuilder();
    
            Document doc = db.parse(new File("student.xml"));
    
            // System.out.println(doc.getXmlEncoding());
            // System.out.println(doc.getXmlVersion());
            // System.out.println(doc.getXmlStandalone());
    
            // 得到根节点
            Element root = doc.getDocumentElement();
            System.out.println("rootTagName: " + root.getTagName());
    
            // 得到根节点的子节点,注意此处的空格也被计为子节点
            NodeList list = root.getChildNodes();
            System.out.println("root child Count: " + list.getLength());
    
            for (int i = 0; i < list.getLength(); i++)
            {
                System.out.println("item " + i + ": getNodeName: "
                        + list.item(i).getNodeName());
            }
    
            System.out.println("------------NodeType and Value----------------");
    
            for (int i = 0; i < list.getLength(); i++)
            {
                Node n = list.item(i);
    
                // getNodeType返回的是short型的常量值,文档中有定义每个值对应的类型
                System.out.println("getNodeType: " + n.getNodeType()
                        + " , getNodeValue: " + n.getNodeValue());
            }
    
            System.out.println("-----------getTextContent----------------");
    
            for (int i = 0; i < list.getLength(); i++)
            {
                Node n = list.item(i);
    
                System.out.println(n.getTextContent());
            }
    
            System.out.println("-------------属性测试----------------");
    
            NodeList nodeList = doc.getElementsByTagName("学生");
    
            for (int i = 0; i < nodeList.getLength(); i++)
            {
                NamedNodeMap nnm = nodeList.item(i).getAttributes();
    
                String attrName = nnm.item(0).getNodeName();
                System.out.print("node " + i + ": " + attrName);
                System.out.print("=");
    
                // 属性的名字和值即为本身的名字和值
                String attrValue = nnm.item(0).getNodeValue();
                System.out.println(attrValue);
            }
    
        }
    }

      程序输出: 

    rootTagName: 学生名册
    root child Count: 7
    item 0: getNodeName: #text
    item 1: getNodeName: 学生
    item 2: getNodeName: #text
    item 3: getNodeName: 学生
    item 4: getNodeName: #text
    item 5: getNodeName: 学生
    item 6: getNodeName: #text
    ------------NodeType and Value----------------
    getNodeType: 3 , getNodeValue: 
        
    getNodeType: 1 , getNodeValue: null
    getNodeType: 3 , getNodeValue: 
        
    getNodeType: 1 , getNodeValue: null
    getNodeType: 3 , getNodeValue: 
        
    getNodeType: 1 , getNodeValue: null
    getNodeType: 3 , getNodeValue: 
    
    -----------getTextContent----------------
    
        
    
            张三
            男
            20
        
    
        
    
            李四
            女
            19
        
    
        
    
            王五
            男
            21
        
    
    
    -------------属性测试----------------
    node 0: 学号=1
    node 1: 学号=2
    node 2: 学号=3

     

    参考资料

      圣思园张龙老师视频教程。

      Java官方文档:http://docs.oracle.com/javase/7/docs/api/index.html

     

     

  • 相关阅读:
    MQTT的编译和安装(mosquitto)
    四、固件分析-固件逆向
    三、固件分析-固件提取
    二、硬件分析-电路分析
    一、硬件分析
    gdb调试
    AES加密中遇到的坑
    多线程中快速定位段错误位置
    理想的数据加密流程
    Centos进入单用户修改root密码
  • 原文地址:https://www.cnblogs.com/mengdd/p/3113453.html
Copyright © 2020-2023  润新知