- 浏览: 15864 次
- 性别:
- 来自: 南京
最新评论
-
spe294096580:
[size=medium]zxX[/align][align= ...
用Servlet实现MVC模式 -
spe294096580:
zczxzdcx
用Servlet实现MVC模式 -
spe294096580:
xs[b][/b][i][/i][u][/u]
用Servlet实现MVC模式
回顾:
对数据库关闭的问题
例如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 个预定义的实体引用:
< < 小于
> > 大于
& & 和号
' ' 单引号
" " 引号
注释:在 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() 查看堆栈顶部的对象,但不从堆栈中移除它。
发表评论
-
Spring +Struts
2009-07-28 09:44 1096近期学习总结: 一农(412792674) 18:35:0 ... -
用Servlet实现MVC模式
2009-07-19 11:19 4663MVC模式的学习 今天的 ... -
反射机制的理解
2009-07-17 11:13 951今天由于马老师临时有事,今天改为星期天 今天复习了昨天讲的反 ... -
Servlet学习以及使用
2009-07-16 10:56 1084近期任务安排 今天的内容是继续理解昨天的CRUD的写法,然后 ... -
myeclipse快捷键整理
2009-07-14 09:33 2069昨天留下的问题: 1. myeclipse中快捷键的学习使用; ... -
JDBC相关知识
2009-07-12 20:31 890马老师今天的上课的内容以及今天的练习: 第一天大家安装了需要的 ... -
内置对象的使用
2009-07-12 09:25 893提及到的基本名词 1. re ... -
7.10 javaee基础使用工具的安装、配置及简单使用
2009-07-11 09:33 10111.学习了安装tomcat,mysql,subeclipse, ...
相关推荐
通过以上分析可以看出,虽然这段代码并非纯粹的XML文档,但从XML的角度来看,我们可以学习到很多关于文档结构、元素、属性、样式以及脚本处理的知识点。XML是一种非常强大的数据交换格式,掌握XML的基本语法和结构...
python有趣的库《学习XML》这份资源文件旨在为初学者和进阶用户提供一个全面而深入的XML知识指南。通过详细解读XML的基础语法、结构、以及应用场景,该文件旨在帮助读者理解XML如何被广泛应用于数据交换、配置文件...
总之,“XML学习手册第二版”是一本全面介绍XML的资源,无论你是初学者还是有经验的开发者,都能从中获得宝贵的知识。通过学习XML,你将掌握一种强大的数据描述和交换工具,这对于在IT行业中进行数据处理和系统集成...
总的来说,这个“XML学习大全”资料包全面覆盖了XML的基础到进阶知识,对开发者深入理解并有效利用XML进行开发具有极高的参考价值。通过深入学习和实践,开发者可以提升其在数据处理和应用开发上的专业技能。
有效的知识管理可以促进知识的积累和传播,提高组织和个人的学习能力,是实现组织战略目标的关键。 知识存储是知识管理的一个重要组成部分,它涉及到知识的捕获、存储和维护。在信息技术中,知识存储可以采取多种...
### XML轻松学习手册知识点梳理 #### 一、XML概述与入门 **1.1 什么是XML?** - **定义**: XML(Extensible Markup Language)是一种扩展性标记语言,用于结构化地存储和传输数据。 - **特点**: 与HTML不同,XML...
XML(Extensible Markup Language)是一种用于描述数据的语言,它的主要目的是使数据的结构...随着Web技术的发展,XML的重要性日益凸显,无论是网页设计师还是开发者,都需要掌握XML的基础知识,以便在工作中灵活运用。
通过这套北大XML教学学习课件,学习者不仅可以获得XML的理论知识,还能通过实例操作加深理解,提升实际应用能力。对于想要从事Web开发、数据处理或者需要与各种系统进行数据交互的IT专业人士来说,深入学习XML是非常...
XML的学习文档通常会涵盖以下几个核心知识点: 1. **XML基本语法**:XML文档必须符合一定的语法规则,包括文档声明、元素、属性、实体引用、注释等。例如,每个XML文档都应以`<?xml version="1.0" encoding="UTF-8...
XML(eXtensible Markup Language)...通过学习这些内容,你可以深入理解XML,并能有效地使用XML来组织和交换数据。无论你是网页开发者、软件工程师还是数据管理人员,XML基础知识的掌握都将对你的工作带来极大的帮助。
这个软件包提供了学习创建和显示XML文档所需基础知识的所有信息、指导和软件。本书还包括了指向Web上大量XML信息的详尽链接集,如果你想要了解基础知识以外的信息,则可以利用这些链接。在本书中将学到什么本书的第...
首先,XML的基础知识包括其基本结构和语法。XML文档由元素(Element)、属性(Attribute)、文本(Text)等构成,遵循严格的规则,如元素必须有闭合标签,属性值需加引号等。了解这些基础,是学习XML的第一步。 XML...
XML,全称可扩展标记语言(Extensible Markup Language),是一种元标记语言,它的设计目的是传输和存储...通过掌握XML的基础知识和应用技术,开发者可以更好地管理和操作结构化数据,提升软件系统的灵活性和可维护性。
XML 学习心得 XML(Extensible Markup Language)是标准通用标记语言的子集,用于标记电子文件,使其具有结构性的标记语言。它可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。...
学习XML时,阅读“XML Schema学习总结.pdf”和“Schema.pdf”可以深入了解XML Schema的细节和用法,“xml.pptx”可能是一个关于XML的演示文稿,涵盖了XML的基础知识和应用案例。“dtd”文件是DTD的实际示例,而“xml...
XML学习指南,极适合新手学习,其中样式表、处理指令和CDATA、DTD子集、级联样式表、XSL模版等XML基本知识都有详细介绍及教学,本书将有助你开发ASP.NET+XML网络程序时遇到的XML方方面面的问题
在“xml留言版(xml入门学习)”的主题中,我们可以深入探讨XML的基础概念、XML文档结构、XML命名空间、DTD(Document Type Definition)或XML Schema以及XML解析等关键知识点。 1. **XML基础**: - XML设计的目标是...
XML的基础知识主要包括以下几个方面: 1. **XML文档结构**:XML文档由三部分组成:声明、元素和属性。声明部分通常以`<?xml version="1.0" encoding="UTF-8"?>`开始,定义文档的版本和字符编码。元素是XML的核心,...
XML(eXtensible Markup Language)是一种用于标记...通过学习这些基础知识和细节,你可以更好地理解和使用XML,无论是进行数据存储、Web服务开发还是其他XML相关的工作。不断探索和实践,将使你成为XML领域的专家。