Java学习之Xml系列一:初始步骤、查询元素及属性、遍历元素

话不多说,全在代码和注释说明里了。

DTD文件:SwordTypeDefinition.dtd

<?xml version="1.0" encoding="UTF-8"?>
<!ELEMENT SwordLibrary (Sword*)>
<!ELEMENT Sword (SwordName,Price,Attack)>
<!ELEMENT SwordName (#PCDATA)>
<!ELEMENT Price (#PCDATA)>
<!ELEMENT Attack (#PCDATA)>
<!ATTLIST Sword sno CDATA #REQUIRED>
<!ATTLIST Price type CDATA #IMPLIED>
<!ATTLIST Attack factor CDATA "1.0">

XML文件:SwordLib.xml

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE SwordLibrary SYSTEM "SwordTypeDefinition.dtd">
<SwordLibrary>
<Sword sno=‘s1‘>
<SwordName>欢欣之刃</SwordName>
<Price>1000</Price>
<Attack>10</Attack>
</Sword>
</SwordLibrary>

java代码:

package JavaLeaner.XmlTest;

import java.io.IOException;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;

import org.junit.Test;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;

public class XmlDemo1 {

    /*
     * xml的helloworld
     * 初始三大步骤:
     * 1.建文档构造工厂
     * 2.建文档构造器
     * 3.建文档对象
     */
    @Test
    public void Test1() throws ParserConfigurationException, SAXException, IOException
    {
        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
        DocumentBuilder docDuilder = factory.newDocumentBuilder();
        Document doc = docDuilder.parse("src/JavaLeaner/XmlTest/SwordLib.xml");
        //注意:在eclipse中写dtd和xml,如果dtd本身不正确会导致xml编辑器无法提示出所引用dtd的元素和属性。
        //注意:只要xml和dtd文件格式正确,以上建立Document的操作无编译错误,并且运行也正常。
        //这说明建立Docment的操作与否仅仅与xml和dtd文件格式是否正确有关,而与xml是否符合dtd无关。(实验了子元素顺序跌倒,确实requried属性等接等够正常运行)
        //但是,xml不符合dtd,eclipse IDE会进行提示。
    }
    
    /*
     * xml查询特定元素
     * 
     */
    @Test
    public void Test2() throws ParserConfigurationException, SAXException, IOException
    {
        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
        DocumentBuilder docDuilder = factory.newDocumentBuilder();
        Document doc = docDuilder.parse("src/JavaLeaner/XmlTest/SwordLib.xml");

        NodeList list = doc.getElementsByTagName("Sword");
        Node node = list.item(0);
        Element swordTag=(Element)node;
        String snoText=swordTag.getAttribute("sno");
        String tagText=swordTag.getTextContent();

        System.out.println("sno:"+snoText);
        System.out.println("tagText:"+tagText);    
        //即使运行到这里,如果xml的sword元素没有sno属性,依然可以正常运行,只不过结果为空串
        //此时运行结果:
        //sno:
        //tagText:欢欣之刃100010
        //
        //xml正确时的结果:
        //sno:s1
        //tagText:欢欣之刃100010
        //注意:元素内有子元素,其getTextContent()得到的是取出xml格式后的纯内容
        
        
    }
    
    
    /*
     * xml遍历某一元素下的所有子元素和属性
     */
    @Test
    public void Test3() throws ParserConfigurationException, SAXException, IOException
    {
        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
        DocumentBuilder docDuilder = factory.newDocumentBuilder();
        Document doc = docDuilder.parse("src/JavaLeaner/XmlTest/SwordLib.xml");
        //注意:在eclipse中写dtd和xml,如果dtd本身不正确会导致xml编辑器无法提示出所引用dtd的元素和属性。
        //注意:只要xml和dtd文件格式正确,以上建立Document的操作无编译错误,并且运行也正常。
        //这说明建立Docment的操作与否仅仅与xml和dtd文件格式是否正确有关,而与xml是否符合dtd无关。(实验了子元素顺序跌倒,确实requried属性等接等够正常运行)
        //但是,xml不符合dtd,eclipse IDE会进行提示。
        
        NodeList list = doc.getElementsByTagName("Sword");
        //注意:NodeList是个接口,并且它没有实现Iterable接口,所以不能使用增强for循环来遍历
        //Can only iterate over an array or an instance of java.lang.Iterable
        //错误用法:for(Node node:list){}
        for(int i=0;i<list.getLength();i++)
        {
            Element swordTag=(Element)list.item(i);
            
            String snoText=swordTag.getAttribute("sno");
            System.out.println("sno:"+snoText);
            
            String SwordName = swordTag.getElementsByTagName("SwordName").item(0).getTextContent();
            String Price = swordTag.getElementsByTagName("Price").item(0).getTextContent();
            String Attack = swordTag.getElementsByTagName("Attack").item(0).getTextContent();
            System.out.println("SwordName:"+SwordName);
            System.out.println("Price:"+Price);
            System.out.println("Attack"+Attack);
            
/*            sno:s1
            SwordName:欢欣之刃
            Price:1000
            Attack10*/

            
        }
        
    }
    
    
}

Java学习之Xml系列一:初始步骤、查询元素及属性、遍历元素,布布扣,bubuko.com

时间: 2024-12-23 00:43:22

Java学习之Xml系列一:初始步骤、查询元素及属性、遍历元素的相关文章

Java学习之Xml系列三:dtd校验、改、增、删

见摘要.见代码注释,其他话不多说: DTD文档: <?xml version="1.0" encoding="UTF-8"?> <!ELEMENT SwordLibrary (Sword*)> <!ELEMENT Sword (SwordName,Price,Attack)> <!ELEMENT SwordName (#PCDATA)> <!ELEMENT Price (#PCDATA)> <!ELE

原 Java学习之Xml系列二:xml按条件查询、xml递归遍历所有元素和属性

xml中加入了几条,为了方便查询时作为示例. 话不多说见代码注释: DTD文件:SwordTypeDefinition.dtd <?xml version="1.0" encoding="UTF-8"?> <!ELEMENT SwordLibrary (Sword*)> <!ELEMENT Sword (SwordName,Price,Attack)> <!ELEMENT SwordName (#PCDATA)> &l

Java学习之Xml系列五:SAX解析——搜索xml内容

本文对SAX解析进一步说明. 另外主要给利用SAX解析方法找到指定条件(如标签名称)的xml文档内容. 首先按需要介绍一下DefaultHandler. DefaultHandler类是SAX2事件处理程序的默认基类.它继承了EntityResolver.DTDHandler.ContentHandler和ErrorHandler这四个接口.包含这四个接口的所有方法,所以我们在编写事件处理程序时,可以不用直接实现这四个接口,而继承该类,然后重写我们需要的方法.(注意:ContentHandler

java学习之xml

xml的处理有两种方式dom和Sax 其中dom有3套api ,分别是dom和jdom和dom4j 1 package com.gh.xml; 2 3 import java.io.File; 4 import java.util.ArrayList; 5 import java.util.List; 6 7 import javax.xml.parsers.DocumentBuilder; 8 import javax.xml.parsers.DocumentBuilderFactory; 9

Java学习02-web.xml配置详解

<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee htt

深入学习jQuery选择器系列第八篇——过滤选择器之伪子元素选择器

× 目录 [1]通用形式 [2]反向形式 [3]首尾元素 [4]唯一元素 前面的话 本文是子元素选择器的续篇,主要介绍关于nth-of-type()选择器的内容.该部分内容并非没有出现在<锋利的jQuery>一书中,nth-of-type()选择器参照CSS中的nth-of-type选择器,于1.9版本新增,本文将详细介绍该内容 通用形式 :nth-of-type() 个人认为,:nth-of-type()选择器不应该归类于子元素选择器,也不完全等同索引选择器,因为其索引是指特定元素的索引,但

深入学习jQuery选择器系列第四篇——过滤选择器之属性选择器

× 目录 [1]简单属性 [2]具体属性 [3]条件属性 前面的话 属性过滤选择器的过滤规则是通过元素的属性来获取相应的元素,对应于CSS中的属性选择器.属性过滤选择器可分为简单属性选择器.具体属性选择器和条件属性选择器三种.本文将详细该部分内容 简单属性选择器 [attribute] [attribute]选择器选择拥有该属性的元素,返回集合元素 //选择拥有title属性的所有元素 $('[title]') //选择拥有title属性的所有span元素 $('span[title]') //

MongoDB学习笔记~自己封装的Curd操作(查询集合对象属性,更新集合对象)

回到目录 我不得不说,mongodb官方驱动在与.net结合上做的不是很好,不是很理想,所以,我决定对它进行了二次封装,这是显得很必然了,每个人都希望使用简单的对象,而对使用复杂,麻烦,容易出错的对象尽而远之,这是正常的,人都是喜欢懒惰的,就像程序员,也是一样,喜欢偷懒,可能说,偷懒是程序员进步的一个标志,呵呵. 下面我是总结的几种标准的操作,主要是针对我封装的官方驱动而方的(MongoOfficialRepository<TEntity>) 1  插入对象和子对象 /// <summa

java学习笔记之xml

xml学习笔记 1:xml的概述 1.1 xml是什么 标记语言:语言中出现了<a></a>的标签 a:HTML 超文本标记语言 (语法非常严格,不能随意的定义标签) b:XML 可扩展的标记语言(用户可以根据自己的需求,随意的定义标签) <垃圾></垃圾> 开发的组织:w3c 开源精神 HTML XML Java Script 版本:使用 1.0 1.2 xml有什么用 a:存储数据 b:作为配置文件 1.3 xml怎么用 2:xml的语法 2.1 文档声