帝国软件
  设为首页 加入收藏 关于我们
 
解密帝国网站管理系统
栏 目:
 
您的位置:首页 > 技术文档 > JAVA编程
Java XML教程(附:源程序A)
作者:未知 发布时间:2005-03-12 来源:JSP天空网
来源:http://d23xapp2.cn.ibm.com/developerWorks/education/xml/xmljava/tutorial/xmljava-1-1.html


sonnet.xml

这是在本教程中贯穿使用的示例 XML 文档。





Shakespeare
William
British
1564
1616



My mistress` eyes are nothing like the sun,
Coral is far more red than her lips red.
If snow be white, why then her breasts are dun,
If hairs be wires, black wires grow on her head.
I have seen roses damasked, red and white,
But no such roses see I in her cheeks.
And in some perfumes is there more delight
Than in the breath that from my mistress reeks.
I love to hear her speak, yet well I know
That music hath a far more pleasing sound.
I grant I never saw a goddess go,
My mistress when she walks, treads on the ground.
And yet, by Heaven, I think my love as rare
As any she belied with false compare.



sonnet.dtd

这是我们示例文档所用的 DTD。




type (Shakespearean | Petrarchan) "Shakespearean">

line,line,line,line,
line,line,line,line,
line,line) >

year-of-birth?,year-of-death?) >

domOne.java

这是我们的第一个 DOM 应用。它解析一个 XML 文档并将其内容输出到标准输出。


/*
* (C) Copyright IBM Corp. 1999 All rights reserved.
*
* US Government Users Restricted Rights Use, duplication or
* disclosure restricted by GSA ADP Schedule Contract with IBM Corp.
*
* The program is provided "as is" without any warranty express or
* implied, including the warranty of non-infringement and the implied
* warranties of merchantibility and fitness for a particular purpose.
* IBM will not be liable for any damages suffered by you as a result
* of using the Program. In no event will IBM be liable for any
* special, indirect or consequential damages or lost profits even if
* IBM has been advised of the possibility of their occurrence. IBM
* will not be liable for any third party claims against you.
*/

import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.io.UnsupportedEncodingException;

import org.w3c.dom.Attr;
import org.w3c.dom.Document;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import com.ibm.xml.parsers.*;

/**
* domOne.java
* Illustrates how to go through a DOM tree.
*/

public class domOne
{
public void parseAndPrint(String uri)
{
Document doc = null;

try
{
DOMParser parser = new DOMParser();
parser.parse(uri);
doc = parser.getDocument();
}
catch (Exception e)
{
System.err.println("Sorry, an error occurred: " + e);
}

// We`ve parsed the document now, so let`s print it.
if (doc != null)
printDOMTree(doc);
}

/** Prints the specified node, then prints all of its children. */
public void printDOMTree(Node node)
{
int type = node.getNodeType();
switch (type)
{
// print the document element
case Node.DOCUMENT_NODE:
{
System.out.println("");
printDOMTree(((Document)node).getDocumentElement());
break;
}

// print element with attributes
case Node.ELEMENT_NODE:
{
System.out.print("<");
System.out.print(node.getNodeName());
NamedNodeMap attrs = node.getAttributes();
for (int i = 0; i < attrs.getLength(); i++)
{
Node attr = attrs.item(i);
System.out.print(" " + attr.getNodeName() +
"="" + attr.getNodeValue() +
""");
}
System.out.println(">");

NodeList children = node.getChildNodes();
if (children != null)
{
int len = children.getLength();
for (int i = 0; i < len; i++)
printDOMTree(children.item(i));
}

break;
}

// handle entity reference nodes
case Node.ENTITY_REFERENCE_NODE:
{
System.out.print("&");
System.out.print(node.getNodeName());
System.out.print(";");
break;
}

// print cdata sections
case Node.CDATA_SECTION_NODE:
{
System.out.print(" System.out.print(node.getNodeValue());
System.out.print("]]>");
break;
}

// print text
case Node.TEXT_NODE:
{
System.out.print(node.getNodeValue());
break;
}

// print processing instruction
case Node.PROCESSING_INSTRUCTION_NODE:
{
System.out.print(" System.out.print(node.getNodeName());
String data = node.getNodeValue();
{
System.out.print(" ");
System.out.print(data);
}
System.out.print("?>");
break;
}
}

if (type == Node.ELEMENT_NODE)
{
System.out.println();
System.out.print(" System.out.print(node.getNodeName());
System.out.print(`>`);
}
}

/** Main program entry point. */
public static void main(String argv[])
{
if (argv.length == 0)
{
System.out.println("Usage: java domOne uri");
System.out.println(" where uri is the URI of the XML document you want to print.");
System.out.println(" Sample: java domOne sonnet.xml");
System.exit(1);
}

domOne d1 = new domOne();
d1.parseAndPrint(argv[0]);
}
}

domCounter.java

这段代码解析一个 XML 文档,然后遍历 DOM 树来采集有关该文档的数据。当数据采集后将其输出到标准输出。


/*
* (C) Copyright IBM Corp. 1999 All rights reserved.
*
* US Government Users Restricted Rights Use, duplication or
* disclosure restricted by GSA ADP Schedule Contract with IBM Corp.
*
* The program is provided "as is" without any warranty express or
* implied, including the warranty of non-infringement and the implied
* warranties of merchantibility and fitness for a particular purpose.
* IBM will not be liable for any damages suffered by you as a result
* of using the Program. In no event will IBM be liable for any
* special, indirect or consequential damages or lost profits even if
* IBM has been advised of the possibility of their occurrence. IBM
* will not be liable for any third party claims against you.
*/

import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.io.UnsupportedEncodingException;

import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import com.ibm.xml.parsers.DOMParser;

/**
* domCounter.java
* This code creates a DOM parser, parses a document, then
* prints statistics about the number and type of nodes
* found in the document.
*/

public class domCounter
{
int documentNodes = 0;
int elementNodes = 0;
int entityReferenceNodes = 0;
int cdataSections = 0;
int textNodes = 0;
int processingInstructions = 0;

public void parseAndCount(String uri)
{
Document doc = null;
try
{
DOMParser parser = new DOMParser();
parser.parse(uri);
doc = parser.getDocument();
}
catch (Exception e)
{
System.err.println("Sorry, an error occurred: " + e);
}

// We`ve parsed the document now, so let`s scan the DOM tree and
// print the statistics.
if (doc != null)
{
scanDOMTree(doc);
System.out.println("Document Statistics for " + uri + ":");
System.out.println("====================================");
System.out.println("Document Nodes: " + documentNodes);
System.out.println("Element Nodes: " + elementNodes);
System.out.println("Entity Reference Nodes: " + entityReferenceNodes);
System.out.println("CDATA Sections: " + cdataSections);
System.out.println("Text Nodes: " + textNodes);
System.out.println("Processing Instructions: " + processingInstructions);
System.out.println(" ----------");
int totalNodes = documentNodes + elementNodes + entityReferenceNodes +
cdataSections + textNodes + processingInstructions;
System.out.println("Total: " + totalNodes + " Nodes");
}
}

/** Scans the DOM tree and counts the different types of nodes. */
public void scanDOMTree(Node node)
{
int type = node.getNodeType();
switch (type)
{
case Node.DOCUMENT_NODE:
documentNodes++;
scanDOMTree(((Document)node).getDocumentElement());
break;

case Node.ELEMENT_NODE:
elementNodes++;
NodeList children = node.getChildNodes();
if (children != null)
{
int len = children.getLength();
for (int i = 0; i < len; i++)
scanDOMTree(children.item(i));
}
break;

case Node.ENTITY_REFERENCE_NODE:
entityReferenceNodes++;
break;

case Node.CDATA_SECTION_NODE:
cdataSections++;
break;

case Node.TEXT_NODE:
textNodes++;
break;

case Node.PROCESSING_INSTRUCTION_NODE:
processingInstructions++;
break;
}
}

/** Main program entry point. */
public static void main(String argv[])
{
if (argv.length == 0)
{
System.out.println("Usage: java domCounter uri");
System.out.println(" where uri is the URI of your XML document.");
System.out.println(" Sample: java domCounter sonnet.xml");
System.exit(1);
}

domCounter dc = new domCounter();
dc.parseAndCount(argv[0]);
}
}



saxOne.java
/*
* (C) Copyright IBM Corp. 1999 All rights reserved.
*
* US Government Users Restricted Rights Use, duplication or
* disclosure restricted by GSA ADP Schedule Contract with IBM Corp.
*
* The program is provided "as is" without any warranty express or
* implied, including the warranty of non-infringement and the implied
* warranties of merchantibility and fitness for a particular purpose.
* IBM will not be liable for any damages suffered by you as a result
* of using the Program. In no event will IBM be liable for any
* special, indirect or consequential damages or lost profits even if
* IBM has been advised of the possibility of their occurrence. IBM
* will not be liable for any third party claims against you.
*/

import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.io.UnsupportedEncodingException;

import org.xml.sax.AttributeList;
import org.xml.sax.HandlerBase;
import org.xml.sax.Parser;
import org.xml.sax.SAXException;
import org.xml.sax.SAXParseException;
import org.xml.sax.helpers.ParserFactory;

import com.ibm.xml.parsers.SAXParser;

/**
* saxOne.java
* This sample program illustrates how to use a SAX parser. It
* parses a document and writes the document? contents back to
* standard output.
*/

public class saxOne
extends HandlerBase
{
public void parseURI(String uri)
{
SAXParser parser = new SAXParser();
parser.setDocumentHandler(this);
parser.setErrorHandler(this);
try
{
parser.parse(uri);
}
catch (Exception e)
{
System.err.println(e);
}
}

/** Processing instruction. */
public void processingInstruction(String target, String data)
{
System.out.print(" System.out.print(target);
if (data != null && data.length() > 0)
{
System.out.print(` `);
System.out.print(data);
}
System.out.print("?>");
}

/** Start document. */
public void startDocument()
{
System.out.println("");
}

/** Start element. */
public void startElement(String name, AttributeList attrs)
{
System.out.print("<");
System.out.print(name);
if (attrs != null)
{
int len = attrs.getLength();
for (int i = 0; i < len; i++)
{
System.out.print(" ");
System.out.print(attrs.getName(i));
System.out.print("="");
System.out.print(attrs.getValue(i));
System.out.print(""");
}
}
System.out.print(">");
}

/** Characters. */
public void characters(char ch[], int start, int length)
{
System.out.print(new String(ch, start, length));
}

/** Ignorable whitespace. */
public void ignorableWhitespace(char ch[], int start, int length)
{
characters(ch, start, length);
}

/** End element. */
public void endElement(String name)
{
System.out.print(" System.out.print(name);
System.out.print(">");
}

/** End document. */
public void endDocument()
{
// No need to do anything.
}

//
// ErrorHandler methods
//

/** Warning. */
public void warning(SAXParseException ex)
{
System.err.println("[Warning] "+
getLocationString(ex)+": "+
ex.getMessage());
}

/** Error. */
public void error(SAXParseException ex)
{
System.err.println("[Error] "+
getLocationString(ex)+": "+
ex.getMessage());
}

/** Fatal error. */
public void fatalError(SAXParseException ex)
throws SAXException
{
System.err.println("[Fatal Error] "+
getLocationString(ex)+": "+
ex.getMessage());
throw ex;
}

/** Returns a string of the location. */
private String getLocationString(SAXParseException ex)
{
StringBuffer str = new StringBuffer();

String systemId = ex.getSystemId();
if (systemId != null)
{
int index = systemId.lastIndexOf(`/`);
if (index != -1)
systemId = systemId.substring(index + 1);
str.append(systemId);
}
str.append(`:`);
str.append(ex.getLineNumber());
str.append(`:`);
str.append(ex.getColumnNumber());

return str.toString();
}

/** Main program entry point. */
public static void main(String argv[])
{
if (argv.length == 0)
{
System.out.println("Usage: java saxOne uri");
System.out.println(" where uri is the URI of your XML document.");
System.out.println(" Sample: java saxOne sonnet.xml");
System.exit(1);
}

saxOne s1 = new saxOne();
s1.parseURI(argv[0]);
}
}

saxCounter.java

/*
* (C) Copyright IBM Corp. 1999 All rights reserved.
*
* US Government Users Restricted Rights Use, duplication or
* disclosure restricted by GSA ADP Schedule Contract with IBM Corp.
*
* The program is provided "as is" without any warranty express or
* implied, including the warranty of non-infringement and the implied
* warranties of merchantibility and fitness for a particular purpose.
* IBM will not be liable for any damages suffered by you as a result
* of using the Program. In no event will IBM be liable for any
* special, indirect or consequential damages or lost profits even if
* IBM has been advised of the possibility of their occurrence. IBM
* will not be liable for any third party claims against you.
*/

import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.io.UnsupportedEncodingException;

import org.xml.sax.AttributeList;
import org.xml.sax.HandlerBase;
import org.xml.sax.Parser;
import org.xml.sax.SAXException;
import org.xml.sax.SAXParseException;
import org.xml.sax.helpers.ParserFactory;
import com.ibm.xml.parsers.SAXParser;

/**
* saxCounter.java
* This sample program calculates statistics for an XML document,
* based on the SAX events received. When the parse is complete,
* it prints the statistics to standard output.
*/

public class saxCounter
extends HandlerBase
{
int startDocumentEvents = 0;
int endDocumentEvents = 0;
int startElementEvents = 0;
int endElementEvents = 0;
int processingInstructionEvents = 0;
int characterEvents = 0;
int ignorableWhitespaceEvents = 0;
int warningEvents = 0;
int errorEvents = 0;
int fatalErrorEvents = 0;

public void parseURI(String uri)
{
SAXParser parser = new SAXParser();
parser.setDocumentHandler(this);
parser.setErrorHandler(this);
try
{
parser.parse(uri);
}
catch (Exception e)
{
System.err.println(e);
}

System.out.println("Document Statistics for " + uri + ":");
System.out.println("====================================");
System.out.println("DocumentHandler Events:");
System.out.println(" startDocument " +
startDocumentEvents);
System.out.println(" endDocument " +
endDocumentEvents);
System.out.println(" startElement " +
startElementEvents);
System.out.println(" endElement " +
endElementEvents);
System.out.println(" processingInstruction " +
processingInstructionEvents);
System.out.println(" character " +
characterEvents);
System.out.println(" ignorableWhitespace " +
ignorableWhitespaceEvents);
System.out.println("ErrorHandler Events:");
System.out.println(" warning " +
warningEvents);
System.out.println(" error " +
errorEvents);
System.out.println(" fatalError " +
fatalErrorEvents);
System.out.println(" ----------");
int totalEvents = startDocumentEvents + endDocumentEvents +
startElementEvents + endElementEvents +
processingInstructionEvents +
characterEvents + ignorableWhitespaceEvents +
warningEvents + errorEvents + fatalErrorEvents;
System.out.println("Total: " +
totalEvents + " Events");
}

/** Processing instruction. */
public void processingInstruction(String target, String data)
{
processingInstructionEvents++;
}

/** Start document. */
public void startDocument()
{
startDocumentEvents++;
}

/** Start element. */
public void startElement(String name, AttributeList attrs)
{
startElementEvents++;
}

/** Characters. */
public void characters(char ch[], int start, int length)
{
characterEvents++;
}

/** Ignorable whitespace. */
public void ignorableWhitespace(char ch[], int start, int length)
{
ignorableWhitespaceEvents++;
}

/** End element. */
public void endElement(String name)
{
endElementEvents++;
}

/** End document. */
public void endDocument()
{
endDocumentEvents++;
}

//
// ErrorHandler methods
//

/** Warning. */
public void warning(SAXParseException ex)
{
warningEvents++;
}

/** Error. */
public void error(SAXParseException ex)
{
errorEvents++;
}

/** Fatal error. */
public void fatalError(SAXParseException ex)
throws SAXException
{
fatalErrorEvents++;
throw ex;
}

/** Main program entry point. */
public static void main(String argv[])
{
if (argv.length == 0)
{
System.out.println("Usage: java saxCounter uri");
System.out.println(" where uri is the URI of your XML document.");
System.out.println(" Sample: java saxCounter sonnet.xml");
System.exit(1);
}

saxCounter sc = new saxCounter();
sc.parseURI(argv[0]);
} }  
  
评论】【加入收藏夹】【 】【打印】【关闭
※ 相关链接
 ·Java编程中更新XML文档的常用方法  (2005-03-12)
 ·XML和Java:一个强大的组合  (2005-03-12)
 ·简析JAVA的XML编程  (2005-03-12)
 ·用Java访问XML数据的简单起步  (2005-03-12)
 ·Sun推出Java XML Pack  (2005-03-12)
 ·Sun推出Java XML Pack 2001年冬季  (2005-03-12)
 ·基于RPC 0.8的Java API for XML最  (2005-03-12)
 ·NEC实现Java/XML开发环境软件包  (2005-03-12)
 ·java 词汇表速查手册(附:J2EE相  (2005-03-12)
 ·Java 理论与实践:让 J2EE 脱离容  (2005-03-12)

   栏目导行
  PHP编程
  ASP编程
  ASP.NET编程
  JAVA编程
   站点最新
·致合作伙伴的欢迎信
·媒体报道
·帝国软件合作伙伴计划协议
·DiscuzX2.5会员整合通行证发布
·帝国CMS 7.0版本功能建议收集
·帝国网站管理系统2012年授权购买说
·PHPWind8.7会员整合通行证发布
·[官方插件]帝国CMS-访问统计插件
·[官方插件]帝国CMS-sitemap插件
·[官方插件]帝国CMS内容页评论AJAX分
   类别最新
·谈谈JDBC
·JDBC专题介绍
·JDBC接口技术
·利用weblogic的POOL(连接池)连接
·Jsp中调用Oracle存储过程的小例子
·JSP数据库操作例程
·JSP数据库连接大全
·用连接池提高Servlet访问数据库的效
·一种简单JDBC连接池的实现
·数据库连接池Java实现小结
 
关于帝国 | 广告服务 | 联系我们 | 程序开发 | 网站地图 | 留言板 帝国网站管理系统