zoukankan      html  css  js  c++  java
  • 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

     

     

  • 相关阅读:
    new的实现原理
    call, apply, bind的内部实现原理
    redux基础第二讲——react-redux
    redux基础第一讲
    React组件的数据
    ES6中的super
    ES5和ES6中实现对象和继承的方法对比
    react组件的生命周期
    浅谈js继承的几种方法
    LeetCode 5274. Number of Ways to Stay in the Same Place After Some Steps
  • 原文地址:https://www.cnblogs.com/mengdd/p/3113453.html
Copyright © 2011-2022 走看看