﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-OpenCloseD-随笔分类-XML</title><link>http://www.blogjava.net/OpenCloseD/category/15580.html</link><description>!Qrdinary
</description><language>zh-cn</language><lastBuildDate>Wed, 28 Feb 2007 04:10:20 GMT</lastBuildDate><pubDate>Wed, 28 Feb 2007 04:10:20 GMT</pubDate><ttl>60</ttl><item><title>关于dom4j的解析</title><link>http://www.blogjava.net/OpenCloseD/archive/2006/10/06/73497.html</link><dc:creator>开关</dc:creator><author>开关</author><pubDate>Thu, 05 Oct 2006 16:16:00 GMT</pubDate><guid>http://www.blogjava.net/OpenCloseD/archive/2006/10/06/73497.html</guid><wfw:comment>http://www.blogjava.net/OpenCloseD/comments/73497.html</wfw:comment><comments>http://www.blogjava.net/OpenCloseD/archive/2006/10/06/73497.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/OpenCloseD/comments/commentRss/73497.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/OpenCloseD/services/trackbacks/73497.html</trackback:ping><description><![CDATA[
		<p>
				<font color="#deb887">
						<strong>实际跟jdom 有相似的地方 主要是<br />JDOM用SAXBuilder<br />DOM4J用SAXReader<br />形成doc 然后<br />输出的方式也不太一样<br />jdom用XMLOutput<br />生成格式<br />然后又xop.setput(doc,os)<br />把输入流和doc当作参数<br />而<br />dom4j则是<br />创建一个 XMLWriter(os,format)<br />format是格式<br />然后由书写器书写(doc)<br />writer.writer(doc)</strong>
						<br />
						<br />例如：dom4j的code 为：<br /><br />import java.io.File;<br />import java.io.FileNotFoundException;<br />import java.io.FileOutputStream;<br />import java.io.IOException;<br />import java.io.OutputStream;<br />import java.io.UnsupportedEncodingException;<br />import java.net.MalformedURLException;<br />import java.util.Iterator;<br />import java.util.List;</font>
		</p>
		<p>
				<font color="#deb887">import org.dom4j.Document;<br />import org.dom4j.DocumentException;<br />import org.dom4j.Element;<br />import org.dom4j.io.OutputFormat;<br />import org.dom4j.io.SAXReader;<br />import org.dom4j.io.XMLWriter;</font>
		</p>
		<p>
				<font color="#deb887">public class parsedom4j {</font>
		</p>
		<p>
				<font color="#deb887"> /**<br />  * @param args<br />  */<br /> public static void main(String[] args) {<br />  // TODO 自动生成方法存根<br />  parsedom4j j=new parsedom4j();<br />  j.delete();<br />  <br /> }<br /> public void update(){<br />   SAXReader parser=new SAXReader();<br />   String path="D:/Example10.xml";<br />   File file=new File(path);<br />         try {<br />    Document doc=parser.read(path);<br />   Element root=doc.getRootElement();<br />   Iterator iter=root.elementIterator();<br />   while(iter.hasNext()){<br />    Element child=(Element)iter.next();<br />    Iterator childchilds=child.elementIterator();<br />    boolean isCorrect=false;<br />    while(childchilds.hasNext()){<br />     Element childchild=(Element)childchilds.next();<br />     if(childchild.getName().equalsIgnoreCase("title")&amp;&amp;childchild.getTextTrim().equalsIgnoreCase("b")){<br />       isCorrect=true;<br />     }if(childchild.getName().equalsIgnoreCase("email")&amp;&amp;isCorrect)<br />     {<br />        childchild.setText("西安@163.com"); <br />      }<br />    }<br />   }<br />   OutputFormat format=new OutputFormat();<br />   format.setEncoding("gb3212");<br />   format.setNewlines(true);<br />         OutputStream os=new FileOutputStream(path);<br />   XMLWriter writer=new XMLWriter(os,format);<br />   writer.write(doc);<br />   os.close();<br />   writer.close();<br />   <br />   <br />  } catch (MalformedURLException e) {<br />   // TODO 自动生成 catch 块<br />   e.printStackTrace();<br />  } catch (Exception e) {<br />   // TODO 自动生成 catch 块<br />   e.printStackTrace();<br />  }<br /> }<br /> <br /> public void delete(){<br />  Element de=null;<br />  SAXReader reader=new SAXReader();<br />  String path="D:/Example10.xml";<br />  Document doc;<br /> try {<br />  doc = reader.read(path);<br />  Element root=doc.getRootElement();<br />  List children=root.elements();<br />  for(int i=0;i&lt;children.size();i++){<br />   Element child=(Element)children.get(i);<br />   List childchilds=child.elements();<br />   for(int j=0;i&lt;childchilds.size();j++){<br />   Element e=(Element)childchilds.get(i);<br />   if(e.getName().equalsIgnoreCase("email")){<br />    de=e;<br />    childchilds.remove(j);<br />   }<br />   }<br />  }<br /> } catch (DocumentException e) {<br />  // TODO 自动生成 catch 块<br />  e.printStackTrace();<br /> }<br />     <br />  <br />    <br />      <br />     <br />  <br /> }</font>
		</p>
		<p>
				<font color="#deb887">   <br />   <br />   <br /> </font>
		</p>
		<p>
				<font color="#deb887"> public parsedom4j() {<br />  super();<br />  // TODO 自动生成构造函数存根<br /> }</font>
		</p>
		<p>
				<font color="#deb887">}<br /></font>
		</p>
<img src ="http://www.blogjava.net/OpenCloseD/aggbug/73497.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/OpenCloseD/" target="_blank">开关</a> 2006-10-06 00:16 <a href="http://www.blogjava.net/OpenCloseD/archive/2006/10/06/73497.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>关于jdom的解析</title><link>http://www.blogjava.net/OpenCloseD/archive/2006/10/06/73496.html</link><dc:creator>开关</dc:creator><author>开关</author><pubDate>Thu, 05 Oct 2006 16:09:00 GMT</pubDate><guid>http://www.blogjava.net/OpenCloseD/archive/2006/10/06/73496.html</guid><wfw:comment>http://www.blogjava.net/OpenCloseD/comments/73496.html</wfw:comment><comments>http://www.blogjava.net/OpenCloseD/archive/2006/10/06/73496.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/OpenCloseD/comments/commentRss/73496.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/OpenCloseD/services/trackbacks/73496.html</trackback:ping><description><![CDATA[
		<p>
				<font color="#deb887">import java.io.File;<br />import java.io.FileInputStream;<br />import java.io.FileNotFoundException;<br />import java.io.FileOutputStream;<br />import java.io.IOException;<br />import java.io.InputStream;<br />import java.io.OutputStream;<br />import java.util.List;</font>
		</p>
		<p>
				<font color="#deb887">import org.jdom.Document;<br />import org.jdom.Element;<br />import org.jdom.input.SAXBuilder;<br />import org.jdom.output.XMLOutputter;</font>
		</p>
		<p>
				<font color="#deb887">public class CreateJdomXml {<br /> String root="messages";<br />    String child="message"; <br /> String[][] childitem={{"title","a"},{"content","aaa"},{"email","aaaaa"}};<br /> /**<br />  * @param args<br />  */<br /> public CreateJdomXml(){<br />  <br /> }<br /> public static void main(String[] args) {<br />  // TODO 自动生成方法存根<br />  CreateJdomXml cj=new CreateJdomXml();<br />  cj.deletexml();<br />  <br /> }<br />    <br /> public void createxml(){<br />  Element roote=new Element(root);<br />  Element childe=new Element(child);<br />  childe.addAttribute("id", "A");<br />  for(int i=0;i&lt;childitem.length;i++){<br />   Element childchild=new Element(childitem[i][0]);<br />   childchild.setText(childitem[i][1]);<br />   childe.addContent(childchild);<br />  }<br />  roote.addContent(childe);<br />  Document doc=new Document(roote);<br />  String newfile="D:/NewCearteExample.xml";<br />  File file=new File(newfile);<br />  if(!file.exists()){<br />   try {<br />    file.createNewFile();<br />   } catch (IOException e) {<br />    // TODO 自动生成 catch 块<br />    e.printStackTrace();<br />   }<br />  }<br />  OutputStream os=null;<br />  try {<br />   os=new FileOutputStream(file);<br />  } catch (FileNotFoundException e) {<br />   // TODO 自动生成 catch 块<br />   e.printStackTrace();<br />  }<br />  XMLOutputter xop=new XMLOutputter();<br />  xop.setEncoding("gb2312");<br />  xop.setIndentSize(3);<br />  xop.setNewlines(true);<br />  xop.setSuppressDeclaration(false);<br />  try {<br />   xop.output(doc, os);<br />   os.close();<br />      <br />  } catch (IOException e) {<br />   // TODO 自动生成 catch 块<br />   e.printStackTrace();<br />  }<br />  <br />  <br /> }<br /> <br /> public void updatexml(){<br />  InputStream is=null;<br />  OutputStream os=null;<br /> String path="D:/NewCearteExample.xml";<br /> File file=new File(path);<br /> try {<br />  is=new FileInputStream(file);<br />  SAXBuilder builder=new SAXBuilder();<br />  Document doc=builder.build(is);<br />  Element root=doc.getRootElement();<br />  List childrenlist=root.getChildren();<br />  Element child=(Element)childrenlist.get(0);<br />  Element childchild=new Element("desc");<br />  childchild.setText("person");<br />  child.addContent(childchild);<br />        <br />  os=new FileOutputStream(file);<br />  XMLOutputter xop=new XMLOutputter();<br />  xop.setNewlines(true);<br />  xop.setIndentSize(3);<br />  xop.setEncoding("gb2312"); <br />  xop.output(doc,os);<br />  os.close();<br />  is.close();<br />  <br />  <br /> } catch (Exception e) {<br />  // TODO 自动生成 catch 块<br />  e.printStackTrace();<br /> }<br />   <br /> <br /> }</font>
		</p>
		<p>
				<font color="#deb887">   public void deletexml(){<br />    InputStream is=null;<br />  OutputStream os=null;<br /> String path="D:/NewCearteExample.xml";<br /> File file=new File(path);  <br /> try{<br /> is=new FileInputStream(file);<br /> SAXBuilder builder=new SAXBuilder();<br /> Document doc=builder.build(is);<br /> Element root=doc.getRootElement();<br /> List childlist=root.getChildren();<br /> Element child=(Element)childlist.get(0);<br /> List childrenlist=child.getChildren();<br /> for(int i=0;i&lt;childrenlist.size();i++){<br />  Element childchild=(Element)childrenlist.get(i);<br />  if(childchild.getName().equalsIgnoreCase("desc")){<br />   childrenlist.remove(i);<br />  }<br /> }<br /> os=new FileOutputStream(file);<br /> XMLOutputter xop=new XMLOutputter();<br /> xop.setNewlines(true);<br /> xop.setIndentSize(3);<br /> xop.setEncoding("gb2312"); <br /> xop.output(doc,os);<br /> os.close();<br /> is.close();<br /> <br /> }catch(Exception e)<br /> {e.printStackTrace();<br /> }<br />   }<br /> <br />}</font>
		</p>
<img src ="http://www.blogjava.net/OpenCloseD/aggbug/73496.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/OpenCloseD/" target="_blank">开关</a> 2006-10-06 00:09 <a href="http://www.blogjava.net/OpenCloseD/archive/2006/10/06/73496.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>关于XML的解析 中使用SAX解析器</title><link>http://www.blogjava.net/OpenCloseD/archive/2006/09/25/71768.html</link><dc:creator>开关</dc:creator><author>开关</author><pubDate>Mon, 25 Sep 2006 07:50:00 GMT</pubDate><guid>http://www.blogjava.net/OpenCloseD/archive/2006/09/25/71768.html</guid><wfw:comment>http://www.blogjava.net/OpenCloseD/comments/71768.html</wfw:comment><comments>http://www.blogjava.net/OpenCloseD/archive/2006/09/25/71768.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/OpenCloseD/comments/commentRss/71768.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/OpenCloseD/services/trackbacks/71768.html</trackback:ping><description><![CDATA[
		<p>
				<font color="#deb887">例如一个Example.xml文件如下：<br />&lt;?xml version="1.0"?&gt;<br /> &lt;Shapes&gt;<br />  &lt;Triangle name="tri1" &gt;<br />      &lt;x&gt; 3 &lt;/x&gt;<br />      &lt;y&gt; 0 &lt;/y&gt;<br />      &lt;height&gt; 3 &lt;/height&gt;<br />      &lt;width&gt; 5 &lt;/width&gt;<br />  &lt;/Triangle&gt; <br />   <br />  &lt;Triangle name="tri2"&gt;<br />      &lt;x&gt; 5 &lt;/x&gt;<br />      &lt;y&gt; 0 &lt;/y&gt;<br />      &lt;height&gt; 3 &lt;/height&gt;<br />      &lt;width&gt; 5 &lt;/width&gt;<br />  &lt;/Triangle&gt;   <br />  <br />  &lt;Square name="sq1" &gt;<br />      &lt;x&gt; 0 &lt;/x&gt;<br />      &lt;y&gt; 0 &lt;/y&gt;<br />      &lt;height&gt; 3 &lt;/height&gt;<br />      &lt;width&gt; 3 &lt;/width&gt;<br />  &lt;/Square&gt;<br />  <br />  &lt;Circle name="circ1" &gt;<br />     &lt;x&gt; 10 &lt;/x&gt;<br />      &lt;y&gt; 10 &lt;/y&gt;<br />      &lt;height&gt; 3 &lt;/height&gt;<br />      &lt;width&gt; 3 &lt;/width&gt;<br />  &lt;/Circle&gt;<br /> &lt;/Shapes&gt;<br /><br />我写的解析算法是：<br />先建立一个shape的父类 然后 创建Triangle ,Cricle,和Square的子类分别继承 但是子类有自己的name属性<br />然后建立解析类coding如下：<br />import java.util.ArrayList;<br />import java.util.List;</font>
		</p>
		<p>
				<font color="#deb887">import org.xml.sax.Attributes;<br />import org.xml.sax.SAXException;<br />import org.xml.sax.XMLReader;<br />import org.xml.sax.helpers.DefaultHandler;<br />import org.xml.sax.helpers.XMLReaderFactory;</font>
		</p>
		<p>
				<font color="#deb887">public class ParserOne extends DefaultHandler {<br /> Triangle tri;<br /> Square   squ;<br /> Circle   cir;<br /> List trislist=new ArrayList();<br /> List squslist=new ArrayList();<br /> List cirslist=new ArrayList();<br /> StringBuffer sb=new StringBuffer();<br /> boolean triangle=false;<br /> boolean square=false;<br /> boolean circle=false;<br /> @Override<br /> public void startDocument() throws SAXException {<br />  // TODO 自动生成方法存根<br /> <br /> }<br /> <br /> @Override<br /> public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {<br />  // TODO 自动生成方法存根<br /> if(qName.equals("Triangle")){<br />  tri=new Triangle();<br />  tri.name=attributes.getValue(0);<br />  trislist.add(tri);<br />  triangle=true;<br /> }else if(qName.equals("Square")){<br />  squ=new Square();<br />  squ.name=attributes.getValue(0);<br />  squslist.add(squ);<br />  square=true;<br /> }else if(qName.equals("Circle")){<br />  cir=new Circle();<br />  cir.name=attributes.getValue(0);<br />     cirslist.add(cir);<br />     circle=true;<br /> }    sb.delete(0, sb.length());<br /> }<br />  <br /> <br /> @Override<br /> public void characters(char[] ch, int start, int length) throws SAXException {<br />  // TODO 自动生成方法存根<br />  sb.append(ch,start,length);<br /> }</font>
		</p>
		<p>
				<font color="#deb887"> @Override<br /> public void endElement(String uri, String localName, String qName) throws SAXException {<br />  // TODO 自动生成方法存根<br /> if(triangle){<br />  if(qName.equals("x")){<br />     tri.x=Integer.parseInt(sb.toString().trim());<br />  }else if(qName.equals("y")){<br />     tri.y=Integer.parseInt(sb.toString().trim());<br />  }else if(qName.equals("height")){<br />     tri.height=Integer.parseInt(sb.toString().trim());<br />  }else if(qName.equals("width")){<br />        tri.width=Integer.parseInt(sb.toString().trim());<br />  }<br /> }else if(square){<br />  if(qName.equals("x")){<br />       squ.x=Integer.parseInt(sb.toString().trim());<br />   }else if(qName.equals("y")){<br />    squ.y=Integer.parseInt(sb.toString().trim());<br />   }else if(qName.equals("height")){<br />    squ.height=Integer.parseInt(sb.toString().trim());<br />   }else if(qName.equals("width")){<br />    squ.width=Integer.parseInt(sb.toString().trim());<br />   } <br /> }else if(circle){<br />  if(qName.equals("x")){<br />      cir.x=Integer.parseInt(sb.toString().trim());<br />  }else if(qName.equals("y")){<br />   cir.y=Integer.parseInt(sb.toString().trim());<br />  }else if(qName.equals("height")){<br />   cir.height=Integer.parseInt(sb.toString().trim());<br />  }else if(qName.equals("width")){<br />   cir.width=Integer.parseInt(sb.toString().trim());<br />  } <br /> }<br /> if(qName.equals("Triangle")){<br />    triangle=false;<br />    }<br />    if(qName.equals("Square")){<br />    square=false;  <br />    } <br />    if(qName.equals("Circle")){<br />    circle=false;<br />    }<br /> }</font>
		</p>
		<p>
				<font color="#deb887">    @Override<br /> public void endDocument() throws SAXException {<br />  // TODO 自动生成方法存根<br /> <br /> }<br />    public static void main(String[] args){<br />     ParserOne par=new ParserOne();<br />     try {<br />//通过XML阅读工厂建立阅读器(解析器) 这里依托xerces.jar 和里面的SAXparser 路径  (使用SAX  API解析器)<br />   XMLReader parser=XMLReaderFactory.createXMLReader("org.apache.xerces.parsers.SAXParser");<br />//有解析器建立拦截器(本例中把本类设置成为拦截器，也可以设置别的类)<br />   parser.setContentHandler(par);<br />//解析器解析(路径)<br />   parser.parse("D:/Example.xml");<br />  } catch (Exception e) {<br />   // TODO 自动生成 catch 块<br />   e.printStackTrace();<br />  }<br />  for(int i=0;i&lt;par.trislist.size();i++){<br />   Triangle tr=(Triangle)par.trislist.get(i);<br />   tr.print(System.out);<br />  }<br />  for(int i=0;i&lt;par.squslist.size();i++){<br />   Square sq=(Square)par.squslist.get(i);<br />   sq.print(System.out);<br />  }<br />  for(int i=0;i&lt;par.cirslist.size();i++){<br />   Circle ci=(Circle)par.cirslist.get(i);<br />   ci.print(System.out);<br />  }<br />  <br />    }</font>
		</p>
		<p>
				<font color="#deb887">}<br /><br /><br />解析 结果如下：<br />name:tri1<br />x:3<br />y:0<br />height:3<br />width:5<br />name:tri2<br />x:5<br />y:0<br />height:3<br />width:5<br />name:sq1<br />x:0<br />y:0<br />height:3<br />width:3<br />name:circ1<br />x:10<br />y:10<br />height:3<br />width:3<br /></font>
		</p>
<img src ="http://www.blogjava.net/OpenCloseD/aggbug/71768.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/OpenCloseD/" target="_blank">开关</a> 2006-09-25 15:50 <a href="http://www.blogjava.net/OpenCloseD/archive/2006/09/25/71768.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>