Java XML教程(附:源程序)

xml|程序|教程

sonnet.xml  这是在本教程中贯穿使用的示例 XML 文档。 <?xml version="1.0"?>  <!DOCTYPE sonnet SYSTEM "sonnet.dtd">  <sonnet type="Shakespearean">  <author>  <last-name>Shakespeare</last-name>  <first-name>William</first-name>  <nationality>British</nationality>  <year-of-birth>1564</year-of-birth>  <year-of-death>1616</year-of-death>  </author>  <title>Sonnet 130</title>  <text>  <line>My mistress` eyes are nothing like the sun,</line>  <line>Coral is far more red than her lips red.</line>  <line>If snow be white, why then her breasts are dun,</line>  <line>If hairs be wires, black wires grow on her head.</line>  <line>I have seen roses damasked, red and white,</line>  <line>But no such roses see I in her cheeks.</line>  <line>And in some perfumes is there more delight</line>  <line>Than in the breath that from my mistress reeks.</line>  <line>I love to hear her speak, yet well I know</line>  <line>That music hath a far more pleasing sound.</line>  <line>I grant I never saw a goddess go,</line>  <line>My mistress when she walks, treads on the ground.</line>  <line>And yet, by Heaven, I think my love as rare</line>  <line>As any she belied with false compare.</line>  </text>  </sonnet>  sonnet.dtd  这是我们示例文档所用的 DTD。 <!-- sonnet.dtd -->  <!ELEMENT sonnet (author,title?,text) >  <!ATTLIST sonnet  type (Shakespearean | Petrarchan) "Shakespearean">  <!ELEMENT text (line,line,line,line,  line,line,line,line,  line,line,line,line,  line,line) >  <!ELEMENT author (last-name,first-name,nationality,  year-of-birth?,year-of-death?) >  <!ELEMENT title (<!ELEMENT last-name (<!ELEMENT first-name (<!ELEMENT nationality (<!ELEMENT year-of-birth (<!ELEMENT year-of-death (<!ELEMENT line ( 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("<?xml version="1.0" ?>");  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("<![CDATA[");  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("<?xml version="1.0"?>");  }  /** 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]);  } }  

时间: 2024-08-04 09:03:43

Java XML教程(附:源程序)的相关文章

Java XML教程(第5章)

xml|教程 来源:http://d23xapp2.cn.ibm.com/developerWorks/education/xml/xmljava/tutorial/xmljava-1-1.html 第五章 解析器高级功能 概览 我们已经讨论了使用一个 XML 解析器来处理 XML 文档的基础.在本章节,我们将探讨一些高级概念. 首先,我们将从头构建一棵 DOM 树.换而言之,我们将不需要一个 XML 源文件来创建一个 Document 对象. 然后,我们将向您显示如何使用解析器来处理包含在一个

Java XML教程(1-3章)

xml|教程 来源:http://d23xapp2.cn.ibm.com/developerWorks/education/xml/xmljava/tutorial/xmljava-1-1.html 第一章 入门介绍 关于本教程  在本教程中,我们将讨论如何使用一个 XML 解析器来: 处理一个 XML 文档 创建一个 XML 文档 操作一个 XML 文档 我们也将讨论一些有用而不为众人所知的 XML 解析器特性. 最重要的,我们所讨论的每个工具都可从 IBM 的 alphaWorks 站点 (

轻松学习XML教程

xml|教程 XML越来越热,关于XML的基础教程网络上也随处可见.可是一大堆的概念和术语往往让人望而生畏,很多朋友问我:XML到底有什么用,我们是否需要学习它?我想就我个人学习过程的心得和经验,写一篇比较全面的介绍文章.首先有两点是需要肯定的: 第一:XML肯定是未来的发展趋势,不论是网页设计师还是网络程序员,都应该及时学习和了解,等待只会让你失去机会: 第二:新知识肯定会有很多新概念,尝试理解和接受,您才可能提高.不要害怕和逃避,毕竟我们还年轻. 提纲 本文共分五大部分.分别是XML快速入门

XML教程

xml|教程 <?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /> XML被作为一种元标记语言,是一种描述标记语言的语言.在本章中您将学到如何说明和描述所创建的新标记语言.这些新的标记语言(也叫标记集)要通过文档类型定义(DTD)来定义,这正是本章要讲述的内容.各个文档要与DTD相比较,这一过程称为合法性检验.如果文档符合DTD中的约束,这个文档就被认为是合法的,否则就是不合

Java网络教程:Protocol Design

原文地址  译者:司余 如果设计一个客户端到服务器的系统,那么同时也需要设计客户端和服务器之间的通信协议.当然,有时候协议已经为你决定好了,比如HTTP.XML_RPC(http response 的 body 使用xml).或者SOAP(也是http response 的 body 使用xml).设计客户端到服务端协议的时候,一旦协议决定开启一会儿,来看一些你必须考虑的地方: 1. 客户端到服务端的往返通讯 2.区分请求结束和响应结束. 3.防火墙穿透 客户端-服务端往返 当客户端和服务端通信

微信公众平台消息接口开发教程 附封装工具实例(1/3)

微信公众平台消息接口 要接收微信平台发送的消息,我们需要先熟悉微信公众平台API中消息接口部分,点此进入,点击后将进入到消息接口指南部分,如下图所示: 开发教程 附封装工具实例(1/3)-js封装组件实例"> 在上图左侧可以看到微信公众平台目前开放的接口有三种:消息接口.通用接口和自定义菜单接口.通用接口和自定义菜单接口只有拿到内测资格才能调用,而内测资格的申请也已经关闭了,我们只有期待将来某一天微信会对大众用户开放吧,所以没有内测资格的用户就不要再浪费时间在这两个接口上,只需要用好消息接

XML教程—编写结构完整的XML文档

xml|教程      一个XML文档如果符合一些基本的规范,那它就是结构规范的.XML格式有一套比HTML简单的解析规则,允许XML解析器不需要外部描述或了解数据含义就可以解析XML数据.      起始标签和结束标签必须匹配   XML元素可以包含正文和其他元素,在它的schema中用严格的规范给出了文档的类型.但是,元素必须严格嵌套:每个起始标签必须有对应的结束标签.   元素不能交迭      下面的例子不符合XML语法.   <title>Evolution of Culture &

JAVA提高教程(14)-认识Map之LinkedHashMap

Java基础及提高教程目录 Map 接口的哈希表和链接列表实现,具有可预知的迭代顺序.此实现与 HashMap 的不同之处在于,后者维护着一个运行于所有条目的双重链接列表.此链接列表定义了迭代顺序,该迭代顺序通常就是将键插入到映射中的顺序(插入顺序).注意,如果在映射中重新插入 键,则插入顺序不受影响.(如果在调用 m.put(k, v) 前 m.containsKey(k) 返回了 true,则调用时会将键 k 重新插入到映射 m 中.) 此实现可以让客户避免未指定的.由 HashMap(及

JAVA提高教程(13)-认识Map之Hashtable

这个类,在使用上和HashMap的区别不大,其方法都是同步的(Synchronized). 1.package collection.lession13; 2. 3.import java.util.Hashtable; 4. 5./** 6. * 老紫竹JAVA提高教程(13)-认识Map之Hashtable<br> 7. * 这个类继承自一个已经过期不推荐使用的Dictionary类<br> 8. * 目前均推荐实现Map接口<br> 9. * 10. * 11.