- 浏览: 79197 次
- 性别:
- 来自: 沈阳
文章分类
最新评论
-
zzw118:
楼主讲解得很好,学习了!
hibernate延迟加载 -
fengwei199181:
不错。
hibernate延迟加载 -
teacher1998:
写得挺全的,格式也蛮好,thanks
Cookie与Session专题 -
wfl888_2007:
谢谢!~ 又回顾了下基础! 看来要经常逛逛! 不然都忘了! ...
CoreJava学习笔记5 -
whaosoft:
基础挺重要的 没事就该看下呢
CoreJava学习笔记5
XML_day01_pm
1.XML可宽展编辑语言
指令:帮助解析文件解析指定信息
1.页面注释:顶格写;
2.标记必须是成对的;
3.根元素只能有一个;
4.元素的属性必须出现在起始标记里;
5.属性必须有值,且属性值必须加引号“”;
6.元素可以有子元素(或说成元素可以有子元素);
7.元素不能交叉;
8.元素体中可以有文本(非解析文本);
2.什么是DTD(XML元素说明文件)
3.DTD中内容说明:
标签<ELEMENT>的作用:对某元素的元素体进行说明;
#PCDATA-》可解析的字符信息;
XML_Schema_day_01_am
1.什么是Schema(计划):schema是一种基于xml的类dtd,他描述了xml文件的架构,XML Schema也是指XML Schema 定义(.xsd),xml的目的在于定义一个合法的创建xml文档块,类似于DTD.
2.命名空间:DTD不支持命名空间,而Schema(.xsd)支持命名空间;
命名空间定义句型:xmlns:prefix=”URL”,如:
<books:book xmlns=:books='http://www.library.com/books'>
<books:title>this book</books:title>
</books:book>
3.Schema的元素:
a.简单元素--》只包含文本的元素;
句型:<xs:element name=”xxx” type=”yyy”/>
schema中有很多内置的type
type常用类型:xs:string xs:decimal xs:integer xs:boolean xs:date xs:time
如,<xs:element name=”price” type=”xs:double”/>
属性默认是可选的:
<xs:element name=”price”type=”xs:double” default=”10”/>
<xs:element name=”price” type=”xs:double” use=”required”/>
简单类型(元素体类型,不包括属性声明)定义的实例:
<xs:simpleType name=”myType”>
<xs:restriction base=”xs:integer”>//整数上加一个范围的约束[0,120]
<xs:minInclusive value=”0”/>
<xs:maxInclusive value=”120”/>
</xs:restriction>
</xs:simpleType>
复杂类型实例(元素体类型,包括属性的声明):
<xs:schema xmlns:xs='http://www.w3.org/2001/XMLSchema'>
<xs:element name=”quantity”>
<xs:simpleContent>
<xs:extension base='xs:nonNegativeInteger'>//基于无非负整数的扩展
<xs:attribute name='backorderable' type='xs:boolean' default='false'/>
</xs:extension>
</xs:simpleContent>
</xs:element>
</xs:schema>
利用上述schema控制的有效的xml片段:
<quantity backorderable='true'>1</quantity>
无效的片段:
<quantity orderable='true'>2</quantity>
4. Xpath和Parsers(解析器)
图 SAX 操作模型
5.JDK中xml解析器SAX所在的包:javax.xml.parsers.*:
javax.xml.parsers.SAXParser类的常用方法:
public void parse(InputSource is, DefaultHandler dh) throws SAXException, IOException
使用指定的 DefaultHandler 将给定 InputSource 的内容解析为 XML。
参数: is - 包含要解析内容的 InputSource。 dh - 要使用的 SAX DefaultHandler。
抛出:
IllegalArgumentException - 如果 InputSource 对象为 null。
IOException - 如果发生任何 IO 错误。
SAXException - 如果在处理过程中发生任何 SAX 错误。
另请参见:
DocumentHandler
一个SAXParser类的实例:
package tang.xml.parser;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
public class MyHandler extends DefaultHandler {
public void startDocument()throws SAXException{
System.out.println("document started...");
}
public void endDocument()throws SAXException{
System.out.println("document ended....");
}
}
package tang.xml.parser;
import java.io.FileInputStream;
import java.io.InputStream;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
public class MyHanlderParser {
/**
*解析xml文件的解析器测试
*/
public static void main(String[] args) throws Exception {
InputStream in = null;
SAXParser parser = null;
SAXParserFactory fac = SAXParserFactory.newInstance();
in = new FileInputStream(
"/home/soft01/jdbcproject/day05/src/tang/xml/parser/books.xml");
parser = fac.newSAXParser();
parser.parse(in, new MyHandler());
in.close();
}
}
结果:
document started...
document ended....
<?xml version="1.0" encoding="UTF-8"?>
<!-- books.xml contents -->
<books>
<book id="b001">
<name>xiaohua</name>
<authuor>tangzhiqiang</authuor>
<title>Java</title>
<price>10.1</price>
</book>
<book id="b002">
<name>bingb</name>
<authuor>tangyi</authuor>
<title>HTML</title>
<price>sheng</price>
</book>
</books>
XML_Schema_day_01_pm
1.xml解析的完整实例:
读取xml文件的实现类
package tang.xml.parser;
import org.xml.sax.SAXException;
import org.xml.sax.Attributes;
import org.xml.sax.helpers.DefaultHandler;
public class MyHandler extends DefaultHandler {
// 获取标签中的数据
public void characters(char[] c, int start, int length) throws SAXException {
System.out.print(new String(c, start, length));
}
// 获得起始标签
public void startElement(String uri, String loacleName, String qName,
Attributes attrs) {
StringBuffer sb = new StringBuffer();
sb.append("<" + qName + " ");//取得起始元素名称
//通过循环获得标签的属性(可能有多个属性)
for (int i = 0; i < attrs.getLength(); i++) {
sb.append(attrs.getQName(i) + "=");//获得属性名
sb.append("'" + attrs.getValue(i) + "'");//获得属性值
}
sb.append(">");
System.out.print(sb.toString());
}
// 获得结束标签
public void endElement(String uri, String localeName, String qName) {
StringBuffer sb = new StringBuffer();
sb.append("</" + qName + ">"); //获得标签后缀名称
System.out.print(sb);
}
// 开始读文件
public void startDocument() throws SAXException {
System.out.println("document started...");
}
// 结束读文件
public void endDocument() throws SAXException {
System.out.println("document ended....");
}
}
调用解析器的主类
package tang.xml.parser;
import java.io.FileInputStream;
import java.io.InputStream;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
public class MyHanlderParser {
/**
*解析xml文件的解析器测试
*/
public static void main(String[] args) throws Exception {
InputStream in = null;
SAXParser parser = null;
SAXParserFactory fac = SAXParserFactory.newInstance();
in = new FileInputStream(
"/home/soft01/jdbcproject/day05/src/tang/xml/parser/books.xml");
parser = fac.newSAXParser();
parser.parse(in, new MyHandler());
in.close();
}
}
读取的结果:
document started...
<books >
<book id='b001'>
<name >xiaohua</name>
<authuor >tangzhiqiang</authuor>
<title >Java</title>
<price >10.1</price>
</book>
<book id='b002'>
<name >bingb</name>
<authuor >tangyi</authuor>
<title >HTML</title>
<price >sheng</price>
</book>
</books>document ended....
2.DOM in Action
图- DOM模型图
DOM的缺点:比较占内存;
DOM操作所用到的类包org.w3c.dom.*;
org.w3c.dom.DocumentBuilderFactory
org.w3c.dom.DocumentBuilder
org.w3c.dom.Document
对象生成顺序:
org.w3c.dom.Node类常用方法:getXXX()/setXXX()
getFirstChild()获得根节点
getLastChild()获得最后一个节点
getNextSibling()获得兄弟节点
org.w3c.dom.Document类
org.w3c.dom.Element类 常用方法getElementsByTagName(String name)
getAttribute(String name);
使用DOM的实例:
package tang.xml.parser;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.xml.sax.SAXException;
public class MyDocumentLab {
/**
* DOM模型实例
*/
public static void main(String[] args) {
FileInputStream in=null;
Document doc=null;
DocumentBuilder builder=null;
DocumentBuilderFactory fac=null;
fac=DocumentBuilderFactory.newInstance();
try {
//获得Document对象
builder=fac.newDocumentBuilder();
in=new FileInputStream("/home/soft01/jdbcproject/day05/src/tang/xml/parser/books.xml");
doc=builder.parse(in);
//获得Element对象
StringBuffer sb=new StringBuffer();
Element root=doc.getDocumentElement();
sb.append(root.getNodeName()+"\n");
sb.append(root.getTagName());
System.out.println(sb);
} catch (ParserConfigurationException e) {
e.printStackTrace();
}catch (FileNotFoundException e){
e.printStackTrace();
} catch (SAXException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally{
try {
in.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
结果:
books
books
使用DOM获取<book>标签的内容
package tang.xml.parser;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
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;
import org.w3c.dom.Text;
import org.xml.sax.SAXException;
public class MyDocumentLab2 {
/**
* @param args
*/
public static void main(String[] args) {
FileInputStream fis=null;
Document doc=null;
DocumentBuilder builder=null;
DocumentBuilderFactory fac=null;
fac=DocumentBuilderFactory.newInstance();
try {
builder=fac.newDocumentBuilder();
fis=new FileInputStream("/home/soft01/jdbcproject/day05/src/tang/xml/parser/books.xml");
doc=builder.parse(fis);
//StringBuffer sb=new StringBuffer();
NodeList nl=doc.getElementsByTagName("book");
for(int i=0;i<nl.getLength();i++){
Element e=(Element)nl.item(i);
System.out.println(processElement(e));
}
} catch (ParserConfigurationException e) {
e.printStackTrace();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (SAXException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
public static String processElement(Element e){
StringBuffer sb=new StringBuffer();
sb.append("<"+e.getTagName());
NamedNodeMap map=e.getAttributes();
for(int i=0;i<map.getLength();i++){
Node attr=map.item(i);
String nodeName=attr.getNodeName();
String nodeValue=attr.getNodeValue();
sb.append(" "+nodeName+"='");
//System.out.println(nodeName+"->"+nodeValue);
sb.append(nodeValue+"'");
}
sb.append(">");
//处理子元素
NodeList children=e.getChildNodes();
for(int i=0;i<children.getLength();i++){
Node child=children.item(i);
String childName=child.getNodeName();
String childValue=child.getNodeValue();
//System.out.println(childName+"->"+childValue);
if(child.getNodeType()==Node.ELEMENT_NODE){
sb.append(processElement((Element)child));//如果是元素节点则递归调用
//System.out.println(child.getNodeName());
}else if(child.getNodeType()==Node.TEXT_NODE){
//sb.append(child.getTextContent());//如果是文本节点则获得文本
sb.append(((Text)child).getWholeText());
// System.out.println(((Text)child).getWholeText());
}
}
sb.append("</"+e.getTagName()+">");
return sb.toString();
}
// private static String processElement(Element e){
// StringBuffer sb = new StringBuffer();
// sb.append("<"+e.getTagName());
// NamedNodeMap attrs = e.getAttributes();
// for(int i=0;i<attrs.getLength();i++){
// Node attr = attrs.item(i);
// sb.append(" "+attr.getNodeName()+"=");
// sb.append(attr.getNodeValue());
// }
// sb.append(">");
// NodeList children = e.getChildNodes();
// for(int i=0;i<children.getLength();i++){
// Node child = children.item(i);
// if(child.getNodeType()==Node.ELEMENT_NODE){
// sb.append(processElement((Element)child));
// }else if(child.getNodeType()==Node.TEXT_NODE){
// sb.append(((Text)child).getWholeText());
// }
// }
// sb.append("</"+e.getTagName()+">");
// return sb.toString();
// }
}
结果:
<book id='b001'>
<name>xiaohua</name>
<authuor>tangzhiqiang</authuor>
<title>Java</title>
<price>21.6</price>
<count>100</count>
</book>
<book id='b002'>
<name>bingb</name>
<authuor>tangyi</authuor>
<title>HTML</title>
<price>10</price>
<count>200</count>
</book>
发表评论
-
在myeclipse下给代码加注释
2010-10-26 14:16 2025给类加注释: 方法一 ... -
Cookie与Session专题
2010-09-30 21:52 924Cookie与Session专题一、coo ... -
内部类的分类
2010-09-29 18:04 12457.11. 内部类(注:所有使用内部类的地方都可以不用内 ... -
Java与中文的问题:char变量可以存中文;中文类名,变量名,方法名
2010-09-29 17:06 1237char容量为16bit,可以存中文 public ... -
JDBC课程笔记
2010-09-23 00:02 1066JDBC_day01_am 1. 2.解耦合 ... -
JDBC中Statement和PreparedStatement的区别
2010-09-22 23:59 963Statement:创建时不传递sql语句;每传入数据库一条s ... -
CoreJava学习心得17
2010-05-01 20:40 852JAVA5.0 的注释 (Annotation) ... -
CoreJava学习心得16
2010-05-01 20:35 933Java5.0的新特性 自动装 ... -
CoreJava学习心得15
2010-05-01 20:30 721反射 反射,在运行时 ... -
CoreJava学习心得14
2010-05-01 20:28 930ObjectInputStream和ObjectOutputS ... -
CoreJava学习心得13
2010-05-01 20:24 8601Java中的I/O 使用I/O流访问file中的内容。 J ... -
CoreJava学习笔记12
2010-05-01 20:23 927死锁问题 多线程不释 ... -
CoreJava学习笔记11
2010-05-01 20:20 719Java多线程编程 进程,即运行中的程序,多任务操作系统中并 ... -
CoreJava学习笔记10
2010-05-01 20:16 705awt事件模型(观察者模式)(重点) 事件模型中,包括事件源 ... -
CoreJava学习笔记9
2010-04-27 22:19 891java中的图形界面 GUI,图形化的用户接口,为了人机交互 ... -
CoreJava学习笔记8
2010-04-27 22:18 909[size=medium] ... -
CoreJava学习笔记7
2010-04-27 22:07 856很重要的一章哦 Java封 ... -
CoreJava学习笔记6
2010-04-26 22:27 972java中的接口 接口是一种程序结构,是特殊的抽象类。接口中 ... -
CoreJava学习笔记5
2010-04-26 22:21 975java中的修饰符 static 表示静态,它可以修饰属性, ... -
CoreJava学习笔记4
2010-04-25 18:43 1088面向对象的三大特征:封装、继承、多态 Java中的封装 封 ...
相关推荐
使用Java解析XML,得到XML标签的内容,属性
使用java解析XML文件,解析完之后将解析结果导入mysql数据库中
java在线解析xmljava在线解析xmljava在线解析xmljava在线解析xmljava在线解析xmljava在线解析xmljava在线解析xmljava在线解析xmljava在线解析xmljava在线解析xmljava在线解析xmljava在线解析xmljava在线解析xmljava...
JAVA 解析XML和生成XML文档源码。比较全 1.DOM生成和解析XML文档 2.SAX生成和解析XML文档 3.DOM4J生成和解析XML文档 4.JDOM生成和解析XML
java教材-使用Java解析XML(IT jb就业培训).doc
java解析XML文件java解析XML文件java解析XML文件java解析XML文件java解析XML文件java解析XML文件
NULL 博文链接:https://swordboy007.iteye.com/blog/1562059
dom4j.jar和对应源码src.zip (使用Java解析XML的重要工具)
java解析xml字符串,添加属性,更新属性等
Java解析xml所需jar包
企业级应用 java 解析多级xml 多么复杂的都可以, 一个类,一个jar 包,非常实用,希望大家顶起..
详解Java解析XML的四种方法详解Java解析XML的四种方法详解Java解析XML的四种方法详解Java解析XML的四种方法详解Java解析XML的四种方法
JAVA 解析xml多种方法 JAVA 解析xml多种方法 JAVA 解析xml多种方法 JAVA 解析xml多种方法 JAVA 解析xml多种方法 JAVA 解析xml多种方法 JAVA 解析xml多种方法
* 本类是专门解析XML文件的,主要用于为系统读取自己的配置文件时提供最方便的解析操作 * @author HX * */ public class XmlManager { /** * 得到某节点下某个属性的值 * @param element 要获取属性的...
JAVA解析XML文件四种方式比较,欢迎下载使用!
JAVA解析XML教程 JAVA解析XML教程 JAVA解析XML教程
java程序解析xml的例子
java解析XML的4种经典方法 java解析XML的4种经典方法 java解析XML的4种经典方法
java解析xml实例 java解析xml实例 java解析xml实例