`
xiaoqzai414
  • 浏览: 15864 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

xml知识的学习

阅读更多


回顾:
对数据库关闭的问题
   例如rs.close();stmt.close();con.close();要放在finally()里面,不要放在try()里面 如果放在try()里面的话 当rs.close()出现异常之后,下面如果出现异常则不会进行显示!

今天的学习内容:

今天的任务是xml的介绍和操作,还有eclipse调试,junit的使用
Xml学习网址:http://www.w3school.com.cn/x.asp



一.Xml的学习(xml相关的基础知识)
1. XML 标签对大小写敏感
2. xml必须正确的嵌套
    在 HTML 中,常会看到没有正确嵌套的元素:
<b><i>This text is bold and italic</b></i>
在 XML 中,所有元素都必须彼此正确地嵌套:
<b><i>This text is bold and italic</i></b>
在上例中,正确嵌套的意思是:由于 <i> 元素是在 <b> 元素内打开的,那么它必须在 <b> 元素内关闭。
3. xml必须要有根元素
4. xml属性值必须加引号;
5.在 XML 中,有 5 个预定义的实体引用:
&lt; < 小于
&gt; > 大于
&amp; & 和号
&apos; ' 单引号
&quot; " 引号
注释:在 XML 中,只有字符 "<" 和 "&" 确实是非法的。大于号是合法的,但是用实体引用来代替它是一个好习惯。
5. xml中的注释
   在 XML 中编写注释的语法与 HTML 的语法很相似:
<!-- This is a comment -->
6. xml中空格将会被保留
7. xml中以LF存储换行
8. xml命名的规则
   XML 元素必须遵循以下命名规则:
• 名称可以含字母、数字以及其他的字符
• 名称不能以数字或者标点符号开始
• 名称不能以字符 “xml”(或者 XML、Xml)开始
• 名称不能包含空格
可使用任何名称,没有保留的字词。
   最佳命名习惯
   使名称具有描述性。使用下划线的名称也很不错。
名称应当比较简短,比如:<book_title>,而不是:<the_title_of_the_book>。
避免 "-" 字符。如果您按照这样的方式进行命名:"first-name",一些软件会认为你需要提取第一个单词。
避免 "." 字符。如果您按照这样的方式进行命名:"first.name",一些软件会认为 "name" 是对象 "first" 的属性。
避免 ":" 字符。冒号会被转换为命名空间来使用(稍后介绍)。
XML 文档经常有一个对应的数据库,其中的字段会对应 XML 文档中的元素。有一个实用的经验,即使用数据库的名称规则来命名 XML 文档中的元素。
非英语的字母比如 éòá 也是合法的 XML 元素名,不过需要留意当软件开发商不支持这些字符时可能出现的问题。
二. 今天主要是了解对xml的读取,查找,保存的操作。阅读了相关的程序
操作xml的几种方式:
1. dom方式
2. sax方式
3. jdom方式(不怎么使用)
4. dom4j(方式)(最常用)

     今天阅读的相关源代码:
    
package com.yuqiaotech.simplejee.xml;

import java.io.File; 
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.util.Iterator; 
 
import javax.xml.parsers.DocumentBuilder; 
import javax.xml.parsers.DocumentBuilderFactory; 
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser; 
import javax.xml.parsers.SAXParserFactory; 
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerConfigurationException;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import javax.xml.transform.stream.StreamSource;
 
import org.dom4j.DocumentException;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader; 
import org.dom4j.io.XMLWriter;
import org.w3c.dom.Document; 
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList; 
import org.xml.sax.Attributes; 
import org.xml.sax.SAXException; 
import org.xml.sax.helpers.DefaultHandler; 

import com.sun.org.apache.xpath.internal.XPathAPI;
/**
* 大体代码是从http://www.iteye.com/topic/181865抄来的。
* 下面这个是被广泛抄袭的,关于java里读取xml的概要介绍。
* http://blog.csdn.net/geekwang/archive/2008/05/25/2480504.aspx
*
* 我主要是把从绝对路径读取xml换成了从classpath读取。
* 另外添加了Transformer和xslt,以及XPath的演示,以及相关的一些链接。
*
* 另外可以搜一下jaxp了解这个规范的相关内容。
*
* @author YUQIAOTECH
*
*/
public class SimpleSample  { 
  static String xmlName = "test.xml";
  static String xlst = "xslt.xsl";
  static String dom4jSaveTo = "c:/text.xml";
  static String xsltSaveTo = "c:/text2.html";
 

    /**
     * DOM方式
     */ 
    public void DOM() { 
        long lasting = System.currentTimeMillis(); 
 
        try { 
            InputStream in = SimpleSample.class.getResourceAsStream(xmlName); //有点不懂,为什么能用本身的类;
            DocumentBuilderFactory factory = DocumentBuilderFactory 
                    .newInstance();
            DocumentBuilder builder = factory.newDocumentBuilder(); 
            Document doc = builder.parse(in); //注意这里的Document是org.w3c.dom包下的
            NodeList nl = doc.getElementsByTagName("node"); 
            for (int i = 0; i < nl.getLength(); i++) { 
                System.out.println("|| Name:  |" 
                        + doc.getElementsByTagName("name").item(i) 
                                .getFirstChild().getNodeValue()); 
                System.out.println("||Space:  |" 
                        + doc.getElementsByTagName("space").item(i) 
                                .getFirstChild().getNodeValue()); 
                System.out.println("-------------------------------------------------");            } 
        } catch (Exception e) { 
            e.printStackTrace(); 
        } 
        System.out.println("耗时:" 
                + (System.currentTimeMillis() - lasting) + " MS"); 
    } 
  int i =0;
    class SaxHandler extends DefaultHandler{
    java.util.Stack tags = new java.util.Stack(); 
        public void startElement(String uri, String localName, String qName, 
                Attributes attrs) { 
            tags.push(qName); 
        } 
     
        public void characters(char ch[], int start, int length) 
                throws SAXException { 
        System.out.println(i+++"--------xxxxxxxxx-------------------"); 
            String tag = (String) tags.peek(); 
            if (tag.equals("name")) { 
                System.out.println("|| Name:  |" + new String(ch, start, length)); 
            } 
            if (tag.equals("space")) { 
                System.out.println("||Space:  |" + new String(ch, start, length)); 
            } 
            System.out.println("-------------------------------------------------"); 
        } 
    }
 
    /**
     * SAX方式
     */ 
    //本段程序代码内部具体的实现  不是很懂;
    public void SAX() { 
 
        long lasting = System.currentTimeMillis(); 
        try { 
        InputStream in = SimpleSample.class.getResourceAsStream(xmlName);
            SAXParserFactory sf = SAXParserFactory.newInstance(); 
            SAXParser sp = sf.newSAXParser(); 
            SaxHandler reader = new SaxHandler(); 
            sp.parse(in, reader); 
        } catch (Exception e) { 
            e.printStackTrace(); 
        } 
        System.out.println("SAX 耗时:" 
                + (System.currentTimeMillis() - lasting) + " MS"); 
    } 
 

 
    /**
     * 我懒得去了解JDOM了 :-)。
     * JDOM方式
     */ 
//    public void JDOM() { 
//        long lasting = System.currentTimeMillis(); 
//        try { 
//            SAXBuilder builder = new SAXBuilder(); 
//            org.jdom.Document doc = builder.build(new File("F:/xmltest.xml")); 
//            Element foo = doc.getRootElement(); 
//            List allChildren = foo.getChildren(); 
//            for (int i = 0; i < allChildren.size(); i++) { 
//                System.out.println("|| Name:  |" 
//                        + ((Element) allChildren.get(i)).getChild("name") 
//                                .getText()); 
//                System.out.println("||Space:  |" 
//                        + ((Element) allChildren.get(i)).getChild("space") 
//                                .getText()); 
//                System.out.println("-------------------------------------------------");            } 
//        } catch (Exception e) { 
//            e.printStackTrace(); 
//        } 
//        System.out.println("JDOM RUNTIME:" 
//                + (System.currentTimeMillis() - lasting) + " MS"); 
//    } 
 
    /**
     * DOM4J方式
     */ 
    public void DOM4J() { 
        long lasting = System.currentTimeMillis(); 
        try { 
        InputStream in = SimpleSample.class.getResourceAsStream(xmlName);
            SAXReader reader = new SAXReader(); 
            org.dom4j.Document doc = reader.read(in);  //注意这里的Document是org.dom4j包下的
            org.dom4j.Element root = doc.getRootElement(); 
            org.dom4j.Element foo; 
            for (Iterator i = root.elementIterator("node"); i.hasNext();) { 
                foo = (org.dom4j.Element) i.next(); 
                System.out.println("|| Name:  |" + foo.elementText("name")); 
                System.out.println("||Space:  |" + foo.elementText("space")); 
                System.out.println("-------------------------------------------------"); 
            } 
        } catch (Exception e) { 
            e.printStackTrace(); 
        } 
        System.out.println("DOM4J 耗时:" 
                + (System.currentTimeMillis() - lasting) + " MS"); 
    }
    /**
     * 调用dom4j的保存方法。
     *
     * @throws DocumentException
     * @throws IOException
     */
    public static void saveDocByDom4J() throws DocumentException, IOException{
        Writer out = new OutputStreamWriter(new FileOutputStream(dom4jSaveTo ),"GBK");
        OutputFormat format = OutputFormat.createPrettyPrint();
        XMLWriter writer = new XMLWriter( out, format );
    InputStream in = SimpleSample.class.getResourceAsStream(xmlName);
        SAXReader reader = new SAXReader(); 
        org.dom4j.Document doc = reader.read(in); 
        writer.write( doc );
        out.close();
    }

    /**
     * 使用Transformer和xslt。
     * http://www.ibm.com/developerworks/cn/xml/x-xslt/
     *
     * @throws ParserConfigurationException
     * @throws SAXException
     * @throws IOException
     */
public static void saveByTransformer() throws ParserConfigurationException, SAXException, IOException {
try {
InputStream in = SimpleSample.class.getResourceAsStream(xmlName);
InputStream inXsl = SimpleSample.class.getResourceAsStream(xlst);
        DocumentBuilderFactory factory = DocumentBuilderFactory 
                .newInstance(); 
        DocumentBuilder builder = factory.newDocumentBuilder(); 
        Document doc = builder.parse(in);
        StreamSource style = new StreamSource(inXsl);
TransformerFactory tFactory = TransformerFactory.newInstance();
Transformer transformer = tFactory.newTransformer(style);
transformer.setOutputProperty(OutputKeys.ENCODING, "GBK");
DOMSource source = new DOMSource(doc);
StreamResult result = new StreamResult(new File(xsltSaveTo));
transformer.transform(source, result);
} catch (TransformerConfigurationException e) {
throw new RuntimeException(e.getMessage(), e);
} catch (TransformerException e) {
throw new RuntimeException(e.getMessage(), e);
}
}

//**********************XPath*****************************

/**
* 返回指定的节点。
*
* @param topNode
* @param xPath
* @return
*/
public static Node selectSingleNode(Node topNode, String xPath) {
try {
return XPathAPI.selectSingleNode(topNode, xPath);
} catch (TransformerException e) {
System.out.println(e.getMessage() + " xPath=" + xPath);
throw new RuntimeException(e.getMessage(), e);
}
}

/**
* 根据属性名获取属性节点。
*
* @param node
* @param attributeName
* @return
*/
public static Node getAttributeNode(Node node, String attributeName) {
NamedNodeMap namedNodeMap = node.getAttributes();
return namedNodeMap.getNamedItem(attributeName);
}

/**
* 几个方法的组合。
*
* @param node
* @param xPath
* @param attributeName
* @return
*/
public static String getAttributeNodeByXPath(Node node, String xPath,
String attributeName) {
Node rtn = null;
Node selectedNode = selectSingleNode(node, xPath);
if (selectedNode != null) {
rtn = getAttributeNode(selectedNode, attributeName);
}
if(rtn == null)return null;
return rtn.getNodeValue();
}
/**
* http://www.zvon.org/xxl/XPathTutorial/General_chi/examples.html
* http://www.ibm.com/developerworks/cn/xml/x-wxxm35.html
*
* @throws ParserConfigurationException
* @throws SAXException
* @throws IOException
*/
public static void XPath() throws ParserConfigurationException, SAXException, IOException{
InputStream in = SimpleSample.class.getResourceAsStream(xmlName);
        DocumentBuilderFactory factory = DocumentBuilderFactory 
                .newInstance(); 
        DocumentBuilder builder = factory.newDocumentBuilder(); 
        Document doc = builder.parse(in);
        String attr = getAttributeNodeByXPath(doc,"//node[@id=1]/name","alias");
        System.out.println("alias="+attr);
       
}
    public static void main(String arge[]) throws ParserConfigurationException, SAXException, IOException, DocumentException { 
        SimpleSample myXML = new SimpleSample(); 
        System.out.println("=====================DOM========================="); 
        myXML.DOM(); 
        System.out.println("=====================SAX========================="); 
        myXML.SAX(); 
        //System.out.println("=====================JDOM========================"); 
        //myXML.JDOM(); 
        System.out.println("=====================DOM4J======================="); 
        myXML.DOM4J(); 
        System.out.println("=====================DOM4J的格式化保存=======================");  
        saveDocByDom4J();
        System.out.println("=====================Transformer和xslt的使用======================="); 
        saveByTransformer();
        System.out.println("=====================XPath的演示=======================");
        XPath();
    } 


  

今天掌握的一些函数方法: (都是在 
/simplejee/src/com/yuqiaotech/simplejee/xml/SimpleSample.java)
1. System 类中的public static long currentTimeMillis()  返回以毫秒为单位的当前时间;
2. class类中的public InputStream getResourceAsStream(String name)  查找具有给定名称的资源
3. org.w3c.com 中的Document接口中的 NodeList getElementsByTagName(String tagname)
按文档顺序返回包含在文档中且具有给定标记名称的所有 Element 的 NodeList。
4.  public interface NodeList    int getLength()  列表中的节点数。有效子节点索引的范围是 0 到 length-1(包含此值)。
5.  Node getFirstChild()    获取节点的第一个子节点;
6.  java.util.Stack  public E peek()  查看堆栈顶部的对象,但不从堆栈中移除它。
分享到:
评论

相关推荐

    xml学习知识

    通过以上分析可以看出,虽然这段代码并非纯粹的XML文档,但从XML的角度来看,我们可以学习到很多关于文档结构、元素、属性、样式以及脚本处理的知识点。XML是一种非常强大的数据交换格式,掌握XML的基本语法和结构...

    掌握XML知识个人学习资料

    python有趣的库《学习XML》这份资源文件旨在为初学者和进阶用户提供一个全面而深入的XML知识指南。通过详细解读XML的基础语法、结构、以及应用场景,该文件旨在帮助读者理解XML如何被广泛应用于数据交换、配置文件...

    XML学习手册第二版

    总之,“XML学习手册第二版”是一本全面介绍XML的资源,无论你是初学者还是有经验的开发者,都能从中获得宝贵的知识。通过学习XML,你将掌握一种强大的数据描述和交换工具,这对于在IT行业中进行数据处理和系统集成...

    XML学习大全(适合开发人员)

    总的来说,这个“XML学习大全”资料包全面覆盖了XML的基础到进阶知识,对开发者深入理解并有效利用XML进行开发具有极高的参考价值。通过深入学习和实践,开发者可以提升其在数据处理和应用开发上的专业技能。

    论文研究-知识管理中的基于XML的知识存储.pdf

    有效的知识管理可以促进知识的积累和传播,提高组织和个人的学习能力,是实现组织战略目标的关键。 知识存储是知识管理的一个重要组成部分,它涉及到知识的捕获、存储和维护。在信息技术中,知识存储可以采取多种...

    XML 轻松学习手册(完整版)

    ### XML轻松学习手册知识点梳理 #### 一、XML概述与入门 **1.1 什么是XML?** - **定义**: XML(Extensible Markup Language)是一种扩展性标记语言,用于结构化地存储和传输数据。 - **特点**: 与HTML不同,XML...

    XML轻松学习手册的Word文档

    XML(Extensible Markup Language)是一种用于描述数据的语言,它的主要目的是使数据的结构...随着Web技术的发展,XML的重要性日益凸显,无论是网页设计师还是开发者,都需要掌握XML的基础知识,以便在工作中灵活运用。

    北大XML教学学习课件

    通过这套北大XML教学学习课件,学习者不仅可以获得XML的理论知识,还能通过实例操作加深理解,提升实际应用能力。对于想要从事Web开发、数据处理或者需要与各种系统进行数据交互的IT专业人士来说,深入学习XML是非常...

    XML XML xml学习文档

    XML的学习文档通常会涵盖以下几个核心知识点: 1. **XML基本语法**:XML文档必须符合一定的语法规则,包括文档声明、元素、属性、实体引用、注释等。例如,每个XML文档都应以`&lt;?xml version="1.0" encoding="UTF-8...

    XMLBOOK xml基础知识

    XML(eXtensible Markup Language)...通过学习这些内容,你可以深入理解XML,并能有效地使用XML来组织和交换数据。无论你是网页开发者、软件工程师还是数据管理人员,XML基础知识的掌握都将对你的工作带来极大的帮助。

    XML学习指南 电子书

    这个软件包提供了学习创建和显示XML文档所需基础知识的所有信息、指导和软件。本书还包括了指向Web上大量XML信息的详尽链接集,如果你想要了解基础知识以外的信息,则可以利用这些链接。在本书中将学到什么本书的第...

    XML学习指南(经典)

    首先,XML的基础知识包括其基本结构和语法。XML文档由元素(Element)、属性(Attribute)、文本(Text)等构成,遵循严格的规则,如元素必须有闭合标签,属性值需加引号等。了解这些基础,是学习XML的第一步。 XML...

    XML基础学习笔记指南

    XML,全称可扩展标记语言(Extensible Markup Language),是一种元标记语言,它的设计目的是传输和存储...通过掌握XML的基础知识和应用技术,开发者可以更好地管理和操作结构化数据,提升软件系统的灵活性和可维护性。

    xml学习心得.pdf

    XML 学习心得 XML(Extensible Markup Language)是标准通用标记语言的子集,用于标记电子文件,使其具有结构性的标记语言。它可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。...

    xml学习教程

    学习XML时,阅读“XML Schema学习总结.pdf”和“Schema.pdf”可以深入了解XML Schema的细节和用法,“xml.pptx”可能是一个关于XML的演示文稿,涵盖了XML的基础知识和应用案例。“dtd”文件是DTD的实际示例,而“xml...

    XML 学习指南中文版(PDF)

    XML学习指南,极适合新手学习,其中样式表、处理指令和CDATA、DTD子集、级联样式表、XSL模版等XML基本知识都有详细介绍及教学,本书将有助你开发ASP.NET+XML网络程序时遇到的XML方方面面的问题

    xml留言版(xml入门学习)

    在“xml留言版(xml入门学习)”的主题中,我们可以深入探讨XML的基础概念、XML文档结构、XML命名空间、DTD(Document Type Definition)或XML Schema以及XML解析等关键知识点。 1. **XML基础**: - XML设计的目标是...

    快速学习XML基础知识

    XML的基础知识主要包括以下几个方面: 1. **XML文档结构**:XML文档由三部分组成:声明、元素和属性。声明部分通常以`&lt;?xml version="1.0" encoding="UTF-8"?&gt;`开始,定义文档的版本和字符编码。元素是XML的核心,...

    XML学习的一些基础知识、细节知识

    XML(eXtensible Markup Language)是一种用于标记...通过学习这些基础知识和细节,你可以更好地理解和使用XML,无论是进行数据存储、Web服务开发还是其他XML相关的工作。不断探索和实践,将使你成为XML领域的专家。

Global site tag (gtag.js) - Google Analytics