posts - 2, comments - 1, trackbacks - 0, articles - 9
  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

DOM:parse and print XML document

Posted on 2006-11-30 14:38 ljf2999 阅读(213) 评论(0)  编辑  收藏 所属分类: JDOM.DOM
  1 package  doms;
  2
  3 import  javax.xml.parsers. * // 这个包被包括在j2ee 1.4.2 API中。
  4 import  org.w3c.dom. * // 这个包被包括在j2se 1.5.0 API中。
  5 import  org.xml.sax. * // 这个包被包括在j2ee 1.5.0 API中。
  6
  7
  8 public   class  Dom6  {
  9      public   static   void  main(String[] args)  {
 10         Dom6 d6  =   new  Dom6();
 11         System.out.println(d6.parseXML( " K:/test11/xml/test.xml " ));   
 12     }
  
 13
 14
 15
 16      private  String getDocumentType(Document doc)  // 获取DocumentType信息。为简单起见,不涉及对Entity等的解析。
 17         StringBuffer sb  =   new  StringBuffer();
 18         DocumentType type  =  doc.getDoctype();
 19         String name  =  type.getName();
 20         String publicId  =  type.getPublicId();
 21         String systemId  =  type.getSystemId();
 22          if  (name  ==   null return   "" ;
 23         
 24         sb.append( " <!DOCTYPE  "   +  name);
 25         sb.append(publicId  ==   null   ?   ""  :  "  PUBLIC \ ""  + publicId +  " \ "" );
 26         sb.append(systemId  ==   null   ?   ""  :  "  \ ""  + systemId +  " \ "" );
 27         sb.append( " >\n " );
 28          return  sb.toString();
 29     }

 30      private  String getElementAttrs(Node node)  // 获取一个Element的所有Attribute。
 31         StringBuffer attrs  =   new  StringBuffer();
 32          if  (node.hasChildNodes())  {
 33             NamedNodeMap map  =  node.getAttributes();
 34              for  ( int  i  =   0 ; i  <  map.getLength(); i ++ {
 35                 Node attr  =  map.item(i);
 36                 attrs.append( "   "   +  attr.getNodeName()  +   " =\ ""  + attr.getNodeValue() +  " \ "" );    
 37             }
   
 38         }
  
 39          return  attrs.toString(); 
 40     }

 41      private  String getXMLHeader(Document doc)  // 获取XML头定义。
 42         StringBuffer header  =   new  StringBuffer();
 43         String encoding  =  doc.getXmlEncoding(); 
 44         String version  =  doc.getXmlVersion();
 45          boolean  standalone  =  doc.getXmlStandalone();
 46          if  (version  ==   null   ||  encoding  ==   null return   "" // 如果没有定义XML头,则返回空串。
 47         header.append( " <?xml " );
 48         header.append( "  version=\ ""  + version +  " \ "" );
 49         header.append( "  encoding=\ ""  + encoding +  " \ "" );
 50         header.append(standalone  ==   false   ?   ""  :  "  standalone=\ " true \ "" );
 51         header.append( " ?>\n " );
 52          return  header.toString();
 53     }

 54      private  StringBuffer circle(NodeList list, StringBuffer sb)  // 递归调用,获取所有Element和Node。
 55          for  ( int  i  =   0 ; i  <  list.getLength(); i ++ {
 56             Node node  =  list.item(i);
 57              if  (node.hasChildNodes())  // 如果该节点含有子节点,表明它是一个Element。
 58                 String nodeName  =  node.getNodeName();
 59                 sb.append( " < "   +  nodeName  +   this .getElementAttrs(node)  +   " > " );  // 获取该Element的所有Attribute。
 60                 sb  =   this .circle(node.getChildNodes(), sb);  // 递归调用,操作该Element的子节点。
 61                 sb.append( " </ "   +  nodeName  +   " > " );
 62             }
  else   if  (node.getNodeType()  ==  Node.COMMENT_NODE)  // 检查这个非Element节点是否是注释。
 63                 sb.append( " <!-- "   +  node.getNodeValue()  +   " --> " );
 64             }
  else   {
 65                 sb.append(node.getNodeValue());  
 66             }
 
 67         }
   
 68          return  sb;
 69     }
 
 70      private  String parseXML(String xmlFile)  // 解析一个XML文档。
 71         StringBuffer sb  =   new  StringBuffer( " ///////// ParseXML //////////\n " );
 72          try   {
 73             javax.xml.parsers.DocumentBuilderFactory factory  =  DocumentBuilderFactory.newInstance();
 74             javax.xml.parsers.DocumentBuilder builder  =  factory.newDocumentBuilder();
 75             org.w3c.dom.Document doc  =  builder.parse(xmlFile);  // 获取XML文档.
 76             
 77             sb.append( this .getXMLHeader(doc));  // 获取XML头定义。
 78
 79
 80
 81             sb.append( this .getDocumentType(doc));  // 获取DocumentType信息。
 82             
 83             org.w3c.dom.Element rootElement  =  doc.getDocumentElement();  // 获取根元素。
 84             String rootTagName  =  rootElement.getTagName();
 85             sb.append( " < "   +  rootTagName  +   this .getElementAttrs(rootElement)  +   " > " );
 86              if  (rootElement.hasChildNodes())  // 一般来说,根元素肯定存在子节点。
 87                 sb  =   this .circle(rootElement.getChildNodes(), sb);  // 递归调用,操作根元素的子节点。  
 88             }

 89             sb.append( " </ "   +  rootTagName  +   " > " );
 90         }
  catch  (javax.xml.parsers.ParserConfigurationException pce)  {
 91             
 92         }
  catch  (org.xml.sax.SAXException se)  {
 93             
 94         }
  catch  (java.io.IOException ioe)  {
 95             
 96         }

 97          return  sb.toString();   
 98     }

 99 }

100
101
102 K: / test11 / xml / test.xml
103
104 <? xml version = " 1.0 "  encoding = " GBK " ?>
105 <! DOCTYPE web - app PUBLIC  " -//Sun Microsystems, Inc.//DTD Web Application 2.3//EN "   " http://java.sun.com/dtd/web-app_2_3.dtd " >
106
107 < web - app >
108      <!--  Display Name Field  -->
109      < display - name > adfadfadsdsafsda </ display - name >
110      <!--  Servlet Defination  -->
111      < servlet >
112          < servlet - name > Dom1 </ servlet - name >
113          < servlet - class > doms.Dom1 </ servlet - class >
114          < init - param >
115              < param - name > name </ param - name >
116              < param - value > bitan </ param - value >
117          </ init - param >
118      </ servlet >
119      <!--  Listener List  -->
120      < listener >
121          < listener - class > doms.ListenerClass </ listener - class >
122      </ listener >
123      <!--  Tag Library Mapping  -->
124      < taglib >
125          < taglib - uri > tag1.tld </ taglib - uri >
126          < taglib - location >/ WEB - INF / tlds / tag1.tld </ taglib - location >
127      </ taglib >
128     
129      <!--  自定义的一个标记。用来测试对Attribute和TextNode的解析情况  -->
130      < myself - tag author = " bitan "  email = " ggjj_zhzz@163.com " >
131         下面是一些信息:
132          < test - time > 2005年1月14日 </ test - time >
133          < jdk - version nickname = " tiger " > j2sdk  1.5 .0_01 </ jdk - version >
134          < text - editer > UltraEdit - 32 </ text - editer >
135         测试结束。
136      </ myself - tag >
137 </ web - app >
138
139
140 结果:
141 K:\test11 > javac  - classpath  % classpath %   - d .\web - inf\classes .\src\Dom6.java
142
143 K:\test11 > java  - classpath .\web - inf\classes doms.Dom6
144 //////// / ParseXML  //////////
145 <? xml version = " 1.0 "  encoding = " GBK " ?>
146 <! DOCTYPE web - app PUBLIC  " -//Sun Microsystems, Inc.//DTD Web Application 2.3//EN
147 "   " http: // java.sun.com/dtd/web-app_2_3.dtd">
148 < web - app >
149      <!--  Display Name Field  -->
150      < display - name > adfadfadsdsafsda </ display - name >
151      <!--  Servlet Defination  -->
152      < servlet >
153          < servlet - name > Dom1 </ servlet - name >
154          < servlet - class > doms.Dom1 </ servlet - class >
155          < init - param >
156              < param - name > name </ param - name >
157              < param - value > bitan </ param - value >
158          </ init - param >
159      </ servlet >
160      <!--  Listener List  -->
161      < listener >
162          < listener - class > doms.ListenerClass </ listener - class >
163      </ listener >
164      <!--  Tag Library Mapping  -->
165      < taglib >
166          < taglib - uri > tag1.tld </ taglib - uri >
167          < taglib - location >/ WEB - INF / tlds / tag1.tld </ taglib - location >
168      </ taglib >
169
170
171
172      <!--  自定义的一个标记。用来测试对Attribute和TextNode的解析情况  -->
173      < myself - tag author = " bitan "  email = " ggjj_zhzz@163.com " >
174         下面是一些信息:
175          < test - time > 2005年1月14日 </ test - time >
176          < jdk - version nickname = " tiger " > j2sdk  1.5 .0_01 </ jdk - version >
177          < text - editer > UltraEdit - 32 </ text - editer >
178         测试结束。
179      </ myself - tag >
180 </ web - app >
181
182 K:\test11 >

只有注册用户登录后才能发表评论。


网站导航: