??xml version="1.0" encoding="utf-8" standalone="yes"?>一级片在线播放,亚洲国产高清一区,少妇精品放荡导航http://www.aygfsteel.com/johnnnnn/zh-cnWed, 18 Jun 2025 06:31:20 GMTWed, 18 Jun 2025 06:31:20 GMT60jdom的?/title><link>http://www.aygfsteel.com/johnnnnn/archive/2006/07/07/57095.html</link><dc:creator>石</dc:creator><author>石</author><pubDate>Fri, 07 Jul 2006 03:25:00 GMT</pubDate><guid>http://www.aygfsteel.com/johnnnnn/archive/2006/07/07/57095.html</guid><wfw:comment>http://www.aygfsteel.com/johnnnnn/comments/57095.html</wfw:comment><comments>http://www.aygfsteel.com/johnnnnn/archive/2006/07/07/57095.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/johnnnnn/comments/commentRss/57095.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/johnnnnn/services/trackbacks/57095.html</trackback:ping><description><![CDATA[ <p>最q的工作常常要和XML格式的文档或字符串打交道Q发现用JDOM来做真是方便。可以实现XML应用E序的快速开发?<br />    ?JDOM 中,XML 元素是 Element 的实例,XML 属性就?Attribute 的实例,XML 文档本n是 Document 的实例?br />    因ؓ JDOM 对象是?Document、Element ?Attribute q些cȝ直接实例Q因此创Z个新 JDOM 对象如?Java 语言中?new 操作W一样容易。JDOM 的用是直截了当的?br />    JDOM 使用标准?Java ~码模式。只要有可能Q它使用 Java new 操作W而不故弄玄虚使用复杂的工厂化模式Q对象操作即便对于初学用户也很方便?br />    <br />    本文分两步对JDOM的应用加以介l:XML创徏 ?XML解析<br />一、XML文档创徏<br />    我们由零开始利用JDOM生成一个XML文档。最后的l果(h文档)看v来象q样Q?br />    <?xml version="1.0" encoding="UTF-8"?><br />    <MyInfo comment="introduce myself"><br />        <name>kingwong</name><br />        <sex value="male"/><br />        <contact><br />            <telephone>87654321</telephone><br />        </contact><br />    </MyInfo><br />    1.?MyInfo 为根元素创徏文档<br />        Element rootElement = new Element("MyInfo");//所有的XML元素都是 Element 的实例。根元素也不例外Q)<br />        Document myDocument = new Document(rootElement);//以根元素作ؓ参数创徏Document对象。一个Document只有一个根Q即root元素?br />    2.l根元素d属?br />        Attribute rootAttri = new Attribute("comment","introduce myself");//创徏名ؓ commnet,gؓ introduce myself 的属性?br />        rootElement.setAttribute(rootAttri);//刚创徏的属性添加到根元素?br />        q两行代码你也可以合成一行来写,象这P<br />        rootElement.setAttribute(new Attribute("comment","introduce myself"));<br />        或?br />        rootElement.setAttribute("comment","introduce myself");<br />    3.d元素和子元素<br />        JDOM里子元素是作?contentQ内容)d到父元素里面ȝ,所谓content是cM上面h文档?lt;name></name>之间的东东,即kingwong。罗嗦了Ҏ吧:Q?br />        Element nameElement = new Element("name");//创徏 name 元素<br />        nameElement.addContent("kingwong");//kingwong作ؓcontentd到name元素<br /> rootElement.addContent(nameElement);//name元素作ؓcontentd到根元素<br /> <br /> q三行你也可以合Z句,象这P<br /> rootElement.addContent((Content)(new Element("name").addContent("kingwong")));//因ؓaddContent(Content child)Ҏq回的是一个Parent接口Q而Elementcd时承了Contentcd实现了Parent接口Q所以我们把它造型成Content?br /> <br />        我们用同LҎd带属性的子元?lt;sex value="male"/><br />        rootElement.addContent(new Element("sex").setAttribute("value","male"));//注意q里不需要{型,因ؓaddAttribute(String name,String value)q回值就是一?Element?br />        <br />        同样的,我们d<contract />元素到根元素下,用法上一P只是E微复杂了一些:<br />        rootElement.addContent((Content)(new Element("contact").addContent((Content)(new Element("telephone").addContent("87654321")))));<br />        如果你对q种写Ş式还不太习惯Q你完全可以分步来做Q就象本节刚开始的时候一栗事实上如果层次比较多,写成分步的Ş式更清晰些,也不Ҏ出错?br />    4.删除子元?br />        q个操作比较单:<br />        rootElement.removeChild("sex");//该方法返回一个布?br />        <br />        到目前ؓ止,我们学习了一下JDOM文档生成操作。上面徏立了一个样本文档,可是我们怎么知道对不对呢Q因此需要输出来看一下。我们将JDOM生成的文档输出到控制収ͼ使用 JDOM ?XMLOutputter cR?br />    5.  ?JDOM 转化?XML 文本<br />        XMLOutputter xmlOut = new XMLOutputter("  ",true);<br /> try {<br />  xmlOut.output(myDocument,System.out);<br /> } catch (IOException e) {<br />  e.printStackTrace();<br /> }<br /> XMLOutputter 有几个格式选项。这里我们已指定希望子元素从父元素羃q两个空|q且希望元素间有I?br /> new XMLOutputter(java.lang.String indent, boolean newlines)q个Ҏ在最新版本中已经不徏议用。JDOM有一个专门的用来定义格式化输出的c:org.jdom.output.FormatQ如果你没有Ҏ的要求,有时候用里面的几个静态方法(应该可以说是预定义格式)?getPrettyFormat()可以了。我们把上面的输出格式稍微改一下,pq样Q?br /> XMLOutputter xmlOut = new XMLOutputter(Format.getPrettyFormat());  <br />    6.JDOM文档转化为其他Ş?br />        XMLOutputter q可输出?Writer ?OutputStream。ؓ了输出JDOM文档C个文本文Ӟ我们可以q样做:<br />        FileWriter writer = new FileWriter("/some/directory/myFile.xml");<br />        outputter.output(myDocument, writer);<br />        writer.close();<br />        <br />        XMLOutputter q可输出到字W串,以便E序后面q行再处?<br />        Strng outString = xmlOut.outputString(myDocument);<br />        <br />        当然Q在输出的时候你不一定要输出所有的整个文档Q你可以选择元素q行输出Q?br />        xmlOut.output(rootElement.getChild("name"),System.out);<br />        一句话QJDOM非常灉|方便Q如果你惌一步研IJDOMQ请到官方网站去看一看:<a >http://www.jdom.org</a></p> <p>    本节CZ源码Q?br />package com.cyberobject.study;</p> <p>import java.io.IOException;</p> <p>import org.jdom.Attribute;<br />import org.jdom.Content;<br />import org.jdom.Document;<br />import org.jdom.Element;<br />import org.jdom.output.Format;<br />import org.jdom.output.XMLOutputter;</p> <p>/**<br /> * @author kingwong<br /> *<br /> * TODO To change the template for this generated type comment go to<br /> * Window - Preferences - Java - Code Style - Code Templates<br /> */<br />public class TestJDOM {</p> <p> public static void main(String[] args)<br /> {<br />  Element rootElement = new Element("MyInfo");<br />  Document myDocument = new Document(rootElement);<br />  <br />//  Attribute rootAttri = new Attribute("comment","introduce myself");<br />//  rootElement.setAttribute(rootAttri);<br />  <br />  rootElement.setAttribute("comment","introduce myself");<br />  //rootElement.setAttribute(new Attribute("comment","introduce myself"));<br />//  Element sexElement = new Element("sex");<br />//  rootElement.addContent(sexElement);<br />  <br />//  Element nameElement = new Element("name");<br />//  nameElement.addContent("kingwong");<br />//  rootElement.addContent(nameElement);<br />  <br />  rootElement.addContent((Content)(new Element("name").addContent("kingwong")));<br />  rootElement.addContent(new Element("sex").setAttribute("value","male"));<br />  rootElement.addContent((Content)(new Element("contract").addContent((Content)(new Element("telephone").addContent("87654321")))));<br />  <br />  rootElement.removeChild("sex");<br />  <br />  XMLOutputter xmlOut = new XMLOutputter(Format.getPrettyFormat());<br />  try {<br />   xmlOut.output(myDocument,System.out);<br />   //xmlOut.output(rootElement.getChild("name"),System.out);<br />   //String outString = xmlOut.outputString(myDocument);<br />  } catch (IOException e) {<br />   e.printStackTrace();<br />  }<br /> }<br />}</p> <p>        <br />二、XML文档解析<br />    JDOM 不光可以很方便的建立XML文档Q它的另一个用处是它能够读取ƈ操作现有?XML 数据?br />    JDOM的解析器在org.jdom.input.*q个包里Q其中的DOMBuilder的功能是DOM模型的Document解析成JDOM模型的DocumentQSAXBuilder的功能是从文件或中解析出符合JDOM模型的XML树。由于我们经常要从一个文仉d数据Q因此我们应该采用后者作析工兗?br />解析一个xml文档Q基本可以看成以下几个步骤:<br />    1.实例化一个合适的解析器对?br />        本例中我们用SAXBuilder:<br />        SAXBuilder sb = new SAXBuilder();<br />    2.以包含XML数据的文件ؓ参数Q构Z个文档对象myDocument<br />        Document myDocument = sb.build(/some/directory/myFile.xml);<br />    3.获到根元?br />        Element rootElement = myDocument.getRootElement();<br />        <br />        一旦你获取了根元素Q你可以很方便地对它下面的子元素进行操作了Q下面对Element对象的一些常用方法作一下简单说明:<br />        getChild("childname") q回指定名字的子节点,如果同一U有多个同名子节点,则只q回W一个;如果没有q回null倹{?br />        getChildren("childname") q回指定名字的子节点List集合。这样你可以遍历所有的同一U同名子节点?<br />        getAttributeValue("name") q回指定属性名字的倹{如果没有该属性则q回null,有该属性但是gؓI,则返回空字符丌Ӏ?br />        getChildText("childname") q回指定子节点的内容文本倹{?br />        getText() q回该元素的内容文本倹{?br />        <br />        q有其他没有|列出来的方法,如果需要的话,可以随时查阅JDOM的在U文档:<a >http://www.jdom.org/docs/apidocs/index.html</a>。当然你可以在你需要的地方d、删除元素操作,q记得上面的创徏XML的方法吗Q呵呵~~~<br />        <br />        学习C东还是从实例学v最为快P下面单D个例子,׃上面的XMLh代码来学习JDOM的XML解析。本例中d了样本XML文g里一些属性和contentQ最后我们还在contact元素里插入了一个新元素<email value="<a href="mailto:wanghua@cyberobject.com">wanghua@cyberobject.com</a>" />。尽我们实C对于XML的基本操作,l心的朋友可能会<br />有疑问:如果XML文档的层ơ稍微复杂一些,如果嵌套多达几十上百层的话(开个玩W)Q如果靠q样从根元素一U一U地通过getChild("childname")来访问子元素的话Q将会非常痛苦!是的Q的是q样Q但是我们有另一个有力的工具XPathQؓ什么不用呢Q这是后话!先卖个关子(手敲累啦Q下回吧Q呵呵)?br />        <br />/*<br /> * Created on 2004-8-21<br /> *<br /> * TODO To change the template for this generated file go to<br /> * Window - Preferences - Java - Code Style - Code Templates<br /> */<br />package com.cyberobject.study;</p> <p>import org.jdom.Document;<br />import org.jdom.Element;<br />import org.jdom.input.SAXBuilder;<br />import org.jdom.output.Format;<br />import org.jdom.output.XMLOutputter;</p> <p>/**<br /> * @author kingwong<br /> *<br /> * TODO To change the template for this generated type comment go to<br /> * Window - Preferences - Java - Code Style - Code Templates<br /> */<br />public class TestJDOM2 {<br /> public static void main(String[] args){<br /> SAXBuilder sb = new SAXBuilder();<br />    try<br />    {        <br />     Document doc = sb.build("myFile.xml");<br />  Element root = doc.getRootElement();<br />  <br />  String str1 = root.getAttributeValue("comment");<br />  System.out.println("Root Element's comment attribute is : " + str1);<br />  String str2 = root.getChild("sex").getAttributeValue("value");<br />  System.out.println("sex Element's value attribute is : " + str2);<br />  String str3 = root.getChildText("name");<br />  System.out.println("name Element's content is :" + str3);<br />  String str4 = root.getChild("contact").getChildText("telephone");<br />  System.out.println("contact Element's telephone subelement content is : " + str4 + "\n");<br />  Element inputElement = root.getChild("contact"); <br />  inputElement.addContent(new Element("email").setAttribute("value","<a href="mailto:wanghua@cyberobject.com">wanghua@cyberobject.com</a>"));<br />  <br />  XMLOutputter xmlOut = new XMLOutputter(Format.getPrettyFormat());<br />     String outStr = xmlOut.outputString(root);<br />     System.out.println(outStr);<br />    }<br />    catch(Exception e)<br />    {<br />        e.printStackTrace();<br />    }<br />}<br />}<br /></p> <a > </a> <img src ="http://www.aygfsteel.com/johnnnnn/aggbug/57095.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/johnnnnn/" target="_blank">石</a> 2006-07-07 11:25 <a href="http://www.aygfsteel.com/johnnnnn/archive/2006/07/07/57095.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java写XML文g和读取XML文ghttp://www.aygfsteel.com/johnnnnn/archive/2006/07/02/56133.htmlSun, 02 Jul 2006 02:21:00 GMThttp://www.aygfsteel.com/johnnnnn/archive/2006/07/02/56133.htmlhttp://www.aygfsteel.com/johnnnnn/comments/56133.htmlhttp://www.aygfsteel.com/johnnnnn/archive/2006/07/02/56133.html#Feedback0http://www.aygfsteel.com/johnnnnn/comments/commentRss/56133.htmlhttp://www.aygfsteel.com/johnnnnn/services/trackbacks/56133.html首先Q我们需要徏立一个解析器工厂?br />DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance();
然后可以利用q个工厂来获得一个具体的解析对象?br />DocumentBuilder builder=dbf.newDocumentBuilder();
DocumentBuilder的Parse()Ҏ接受一个XML文档名作入参敎ͼq回一个Document对象。Document对象代表?一个XML文档的树模型?br />Document doc=builder.parse("candiate.xml");
使用Document对象的getElementsByTagName()ҎQ我们可以得C个NodeList对象Q他是XML文档中的标签元素 列表Q可以用NodeList对象的item()Ҏ来得列表中的每一个Node对象?br />NodeList nl=doc.getElementsByTagName("PERSON");
Element node=(Element)nl.item(i);
最后,我们会用Node对象的getNodeValue()Ҏ提取某个标签内的内容?br />node.getElementsByTagName("NAME").item(0).getFirstChild().getNodeValue()
完整E序代码:
import javax.xml.parsers.*;
import org.w3c.dom.*;

public class dom {
public static void main(String args[]){
String uri=args[0];
try{
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();//建立一个解析器工厂?br />DocumentBuilder builder=factory.newDocumentBuilder();//获得一个具体的解析对象?br />Document doc=builder.parse(uri);//q回一个Document对象?br />System.out.println(doc.getImplementation());
NodeList nl =doc.getElementsByTagName("PERSON");//得到一个NodeList对象?br />for (int i=0;i<nl.getLength();i++){
Element node=(Element) nl.item(i);//得列表中的每一个Node对象?br />System.out.print("NAME: ");
System.out.println (node.getElementsByTagName("NAME").item(0).getFirstChild().getNodeValue());
System.out.print("ADDRESS: ");
System.out.println (node.getElementsByTagName("ADDRESS").item(0).getFirstChild().getNodeValue());
System.out.print("TEL: ");
System.out.println (node.getElementsByTagName("TEL").item(0).getFirstChild().getNodeValue());
System.out.print("FAX: ");
System.out.println (node.getElementsByTagName("FAX").item(0).getFirstChild().getNodeValue());
System.out.print("EMAIL: ");
System.out.println (node.getElementsByTagName("EMAIL").item(0).getFirstChild().getNodeValue());
System.out.println();
}
}catch(Exception e){
e.printStackTrace();
}
}
}



2006-07-02 10:21 发表评论
]]>
javahttp://www.aygfsteel.com/johnnnnn/archive/2006/07/01/56095.htmlSat, 01 Jul 2006 07:30:00 GMThttp://www.aygfsteel.com/johnnnnn/archive/2006/07/01/56095.htmlhttp://www.aygfsteel.com/johnnnnn/comments/56095.htmlhttp://www.aygfsteel.com/johnnnnn/archive/2006/07/01/56095.html#Feedback0http://www.aygfsteel.com/johnnnnn/comments/commentRss/56095.htmlhttp://www.aygfsteel.com/johnnnnn/services/trackbacks/56095.htmlhttp://blog.chinaitlab.com/user1/270929/subject/1218.html

2006-07-01 15:30 发表评论
]]>
ZSocket的Java|络~程集a http://www.aygfsteel.com/johnnnnn/archive/2006/07/01/56068.htmlSat, 01 Jul 2006 01:38:00 GMThttp://www.aygfsteel.com/johnnnnn/archive/2006/07/01/56068.htmlhttp://www.aygfsteel.com/johnnnnn/comments/56068.htmlhttp://www.aygfsteel.com/johnnnnn/archive/2006/07/01/56068.html#Feedback0http://www.aygfsteel.com/johnnnnn/comments/commentRss/56068.htmlhttp://www.aygfsteel.com/johnnnnn/services/trackbacks/56068.html
 
  其实,单的分析一下,可以看出客户和服务通讯的主要通道是Socket本nQ而服务器通过acceptҎ是同意和客户徏立通讯.q样当客户徏立Socket的同时。服务器也会使用q一根连U来先后通讯Q那么既然如此只要我们存在多条连U就可以了。那么我们的E序可以变ؓ如下:

  服务?

  import java.io.*;
  import java.net.*;

  public class MyServer {
  public static void main(String[] args) throws IOException{
  ServerSocket server=new ServerSocket(5678);
  while(true){
   Socket client=server.accept();
   BufferedReader in=new BufferedReader(new InputStreamReader(client.getInputStream()));
   PrintWriter out=new PrintWriter(client.getOutputStream());
   while(true){
    String str=in.readLine();
    System.out.println(str);
    out.println("has receive....");
    out.flush();
    if(str.equals("end"))
     break;
   }
   client.close();
  }
  }
  }

  q里仅仅只是加了一个外层的While循环Q这个@环的目的是当一个客戯来就为它分配一个Socket直到q个客户完成一ơ和服务器的交互Q这里也是接受到客L"End"消息.那么现在实C多客户之间的交互了。但?问题又来了,q样做虽然解决了多客?可是是排队执行的。也是说当一个客户和服务器完成一ơ通讯之后下一个客h可以q来和服务器交互Q无法做到同时服务,那么要如何才能同时达到既能相互之间交又能同时交呢Q很昄q是一个ƈ行执行的问题了。所以线E是最好的解决Ҏ?

  那么下面的问题是如何使用U程.首先要做的事情是创徏U程q得其可以和网l连U取得联pR然后由U程来执行刚才的操作Q要创徏U程要么直接l承Thread要么实现Runnable接口Q要建立和Socket的联pd要传递引用就可以?而要执行U程必重写runҎQ而runҎ所做的事情是刚才单线E版本main所做的事情Q因此我们的E序变成了这?

  import java.net.*;
  import java.io.*;

  public class MultiUser extends Thread{
  private Socket client;

  public MultiUser(Socket c){
  this.client=c;
  }

  public void run(){
  try{
   BufferedReader in=new BufferedReader(new InputStreamReader(client.getInputStream()));
   PrintWriter out=new PrintWriter(client.getOutputStream());
   //Mutil User but can parallel
   while(true){
    String str=in.readLine();
    System.out.println(str);
    out.println("has receive....");
    out.flush();
    if(str.equals("end"))
     break;
   }
   client.close();
  }catch(IOException ex){
  }finally{
  }
  }

  public static void main(String[] args)throws IOException{
  ServerSocket server=new ServerSocket(5678);
  while(true){
  //transfer location change Single User or Multi User
  MultiUser mu=new MultiUser(server.accept());
  mu.start();
  }
  }
  }

  我的cȝ接从Threadcȝ承了下来.q且通过构造函C递引用和客户Socket建立了联p,q样每个U程有了。一个通讯道.同样我们可以填写runҎQ把之前的操作交l线E来完成Q这样多客户q行的Socket徏立v来了?

  以上的代码用的?br />
BufferedReader in=new BufferedReader(new InputStreamReader(client.getInputStream()));
PrintWriter out=new PrintWriter(client.getOutputStream());

  q有一U方法是使用

DataInputStream isFromClient = new DataInputStream(client.getInputStream());
DataOutputStream osToClient = new DataOutputStream(client.getOutputStream());

  关于q两U输入输出流的不同,我也只知道前一U对字符串支持比较好Q后面对于读取一个字W串需要处理,但是可以支持很多U类型的输出。对于传递字W串而言前一U应该是很好的选择了?/dd>

2006-07-01 09:38 发表评论
]]> վ֩ģ壺 ƴ| | ԭ| Դ| | | Ȫ| ˮ| | | | ˳| ͬ| ں| | | ˫| | ʯ| | | | ;| | Ϫ| | | | | | | ̩| ԭ| ͺ| | | ɽ| Ǩ| | | ӱ|