??xml version="1.0" encoding="utf-8" standalone="yes"?>粉嫩av在线播放,精品亚洲美女网站,日本大片在线观看http://www.aygfsteel.com/wanspring/archive/2007/01/17/94460.html春辉春辉Wed, 17 Jan 2007 09:18:00 GMThttp://www.aygfsteel.com/wanspring/archive/2007/01/17/94460.htmlhttp://www.aygfsteel.com/wanspring/comments/94460.htmlhttp://www.aygfsteel.com/wanspring/archive/2007/01/17/94460.html#Feedback0http://www.aygfsteel.com/wanspring/comments/commentRss/94460.htmlhttp://www.aygfsteel.com/wanspring/services/trackbacks/94460.html 2007q流行的10句话Q至理名a呀Q不看绝对后

悔,嗯,不相信,不要看了


1Q骑白马的不一定是王子Q他可能是唐僧;

2Q带膀的也不一定是天Q妈妈说Q那是鸟人?br />
3Q水x则无|贱则无敌!

4Q走自己的\Q让别h打Rd?br />
5Q穿别h的鞋Q走自己的\Q让他们扑֎吧?br />
6Q我不是随便的hQ我随便h不是人?br />
7Q女人无所谓正z,正派是因为受到的引诱不够Q男人无所谓忠诚,忠诚是因叛的{码太低?br />
8Q聰明的女h付男hQ而笨女h付女hQ?br />
9Q站的更高,的更远?br />
10Q一個大學生的最低奋斗目标:农妇Q山泉,有点?br />
呵呵Q写的有Ҏ思?br />

春辉 2007-01-17 17:18 发表评论
]]>
Java中四UXML解析技术之不完全测?【{?/title><link>http://www.aygfsteel.com/wanspring/archive/2006/10/13/74993.html</link><dc:creator>春辉</dc:creator><author>春辉</author><pubDate>Fri, 13 Oct 2006 06:40:00 GMT</pubDate><guid>http://www.aygfsteel.com/wanspring/archive/2006/10/13/74993.html</guid><wfw:comment>http://www.aygfsteel.com/wanspring/comments/74993.html</wfw:comment><comments>http://www.aygfsteel.com/wanspring/archive/2006/10/13/74993.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/wanspring/comments/commentRss/74993.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/wanspring/services/trackbacks/74993.html</trackback:ping><description><![CDATA[在^时工作中Q难免会遇到把XML作ؓ数据存储格式。面对目前种cȝ多的解决ҎQ哪个最适合我们呢?在这文章中Q我对这四种LҎ做一个不完全评测Q仅仅针寚w历XMLq块来测试,因ؓ遍历XML是工作中使用最多的(臛_我认??<br /><br />  预备 <br /><br />  试环境Q?<br /><br />  AMD毒龙1.4G OC 1.5G?56M DDR333、Windows2000 Server SP4、Sun JDK 1.4.1+Eclipse 2.1+Resin 2.1.8Q在Debug模式下测试?<br /><br />  XML文g格式如下Q?<br /><br />  Q?xml version="1.0" encoding="GB2312"?Q<RESULTQ<VALUEQ?<br /><br />  QNOQA1234Q?NOQ?<br /><br />  QADDRQ四川省XX县XX镇XX路XDXXP/ADDRQ</VALUEQ<VALUEQ?<br /><br />  QNOQB1234Q?NOQ?<br /><br />  QADDRQ四川省XX市XX乡XX村XXl</ADDRQ</VALUEQ</RESULTQ?<br /><br />  试ҎQ?<br /><br />  采用JSP端调用Bean(至于Z么采用JSP来调用,请参考:http://blog.csdn.net/rosen/archive/2004/10/15/138324.aspx)Q让每一U方案分别解?0K?00K?000K?0000K的XML文gQ计其消耗时?单位:毫秒)?<br /><br />  JSP文gQ?<br /><br />  Q?@ page contentType="text/html; charset=gb2312" %Q<%@ page import="com.test.*"%Q?<br /><br />  QhtmlQ<bodyQ<%String args[]={""};MyXMLReader.main(args);%Q</bodyQ</htmlQ?<br /><br />  试 <br /><br />  首先出场的是DOM(JAXP Crimson解析? <br /><br />  DOM是用与^台和语言无关的方式表CXML文档的官方W3C标准。DOM是以层次l构l织的节Ҏ信息片断的集合。这个层ơ结构允许开发h员在树中L特定信息。分析该l构通常需要加载整个文档和构造层ơ结构,然后才能做Q何工作。由于它是基于信息层ơ的Q因而DOM被认为是Z树或Z对象的。DOM以及q义的基于树的处理具有几个优炏V首先,׃树在内存中是持久的,因此可以修改它以便应用程序能Ҏ据和l构作出更改。它q可以在M时候在树中上下DQ而不是像SAX那样是一ơ性的处理。DOM使用h也要单得多?<br /><br />  另一斚wQ对于特别大的文档,解析和加载整个文档可能很慢且很耗资源,因此使用其他手段来处理这L数据会更好。这些基于事件的模型Q比如SAX?<br /><br />  Bean文gQ?<br /><br />  package com.test; <br /><br />  import java.io.*;import java.util.*;import org.w3c.dom.*;import javax.xml.parsers.*; <br /><br />  public class MyXMLReader{ <br /><br />  public static void main(String arge[]){ <br /><br />  long lasting =System.currentTimeMillis(); <br /><br />  try{ <br /><br />   File f=new File("data_10k.xml"); <br /><br />   DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance(); <br /><br />   DocumentBuilder builder=factory.newDocumentBuilder(); <br /><br />   Document doc = builder.parse(f); <br /><br />   NodeList nl = doc.getElementsByTagName("VALUE"); <br /><br />   for (int i=0;iQnl.getLength();i++){ <br /><br />    System.out.print("车牌L:" + doc.getElementsByTagName("NO").item(i).getFirstChild().getNodeValue()); <br /><br />    System.out.println("车主地址:" + doc.getElementsByTagName("ADDR").item(i).getFirstChild().getNodeValue()); <br /><br />  } <br /><br />  }catch(Exception e){ <br /><br />   e.printStackTrace(); <br /><br />  } <br /><br />  System.out.println("q行旉Q?+(System.currentTimeMillis() - lasting)+"毫秒");}} <br /><br />  10k消耗时_265 203 219 172 <br /><br />  100k消耗时_9172 9016 8891 9000 <br /><br />  1000k消耗时_691719 675407 708375 739656 <br /><br />  10000k消耗时_OutOfMemoryError <br /><br />  接着是SAX <br /><br />  q种处理的优炚w常类g媒体的优点。分析能够立卛_始,而不是等待所有的数据被处理。而且Q由于应用程序只是在d数据时检查数据,因此不需要将数据存储在内存中。这对于大型文档来说是个巨大的优炏V事实上Q应用程序甚至不必解析整个文档;它可以在某个条g得到满时停止解析。一般来_SAXq比它的替代者DOM快许多?<br />  选择DOMq是选择SAXQ?<br /><br />  对于需要自q写代码来处理XML文档的开发h员来_ <br /><br />  选择DOMq是SAX解析模型是一个非帔R要的设计决策?<br /><br />  DOM采用建立树Şl构的方式访问XML文档Q而SAX采用的事件模型?<br /><br />  DOM解析器把XML文档转化Z个包含其内容的树Qƈ可以Ҏq行遍历。用DOM解析模型的优Ҏ~程ҎQ开发h员只需要调用徏树的指oQ然后利用navigation APIs讉K所需的树节点来完成Q务。可以很Ҏ的添加和修改树中的元素。然而由于用DOM解析器的时候需要处理整个XML文档Q所以对性能和内存的要求比较高,其是遇到很大的XML文g的时候。由于它的遍历能力,DOM解析器常用于XML文档需要频J的改变的服务中?<br /><br />  SAX解析器采用了Z事g的模型,它在解析XML文档的时候可以触发一pd的事Ӟ当发现给定的tag的时候,它可以激zM个回调方法,告诉该方法制定的标签已经扑ֈ。SAX对内存的要求通常会比较低Q因为它让开发h员自己来军_所要处理的tag。特别是当开发h员只需要处理文档中所包含的部分数据时QSAXq种扩展能力得到了更好的体现。但用SAX解析器的时候编码工作会比较困难Q而且很难同时讉K同一个文档中的多处不同数据?<br /><br />  Bean文gQ?<br /><br />  package com.test;import org.xml.sax.*;import org.xml.sax.helpers.*;import javax.xml.parsers.*; <br /><br />  public class MyXMLReader extends DefaultHandler { <br /><br />  java.util.Stack tags = new java.util.Stack(); <br /><br />  public MyXMLReader() { <br /><br />  super();} <br /><br />  public static void main(String args[]) { <br /><br />  long lasting = System.currentTimeMillis(); <br /><br />  try { <br /><br />   SAXParserFactory sf = SAXParserFactory.newInstance(); <br /><br />   SAXParser sp = sf.newSAXParser(); <br /><br />   MyXMLReader reader = new MyXMLReader(); <br /><br />   sp.parse(new InputSource("data_10k.xml"), reader); <br /><br />  } catch (Exception e) { <br /><br />   e.printStackTrace(); <br /><br />  } <br /><br />  System.out.println("q行旉Q? + (System.currentTimeMillis() - lasting) + "毫秒");} <br /><br />  public void characters(char ch[], int start, int length) throws SAXException { <br /><br />  String tag = (String) tags.peek(); <br /><br />  if (tag.equals("NO")) { <br /><br />   System.out.print("车牌LQ? + new String(ch, start, length));}if (tag.equals("ADDR")) { <br /><br />  System.out.println("地址:" + new String(ch, start, length));}} <br /><br />  public void startElement(String uri,String localName,String qName,Attributes attrs) { <br /><br />  tags.push(qName);}} <br /><br />  10k消耗时_110 47 109 78 <br /><br />  100k消耗时_344 406 375 422 <br /><br />  1000k消耗时_3234 3281 3688 3312 <br /><br />  10000k消耗时_32578 34313 31797 31890 30328 <br /><br />  然后是JDOM http://www.jdom.org/ <br /><br />  JDOM的目的是成ؓJava特定文档模型Q它化与XML的交互ƈ且比使用DOM实现更快。由于是W一个Java特定模型QJDOM一直得到大力推q和促进。正在考虑通过“Java规范hJSR-102”将它最l用作“Java标准扩展”。从2000q初已l开始了JDOM开发?<br /><br />  JDOM与DOM主要有两斚w不同。首先,JDOM仅用具体类而不使用接口。这在某些方面简化了APIQ但是也限制了灵zL。第二,API大量使用了Collectionsc,化了那些已经熟悉q些cȝJava开发者的使用?<br /><br />  JDOM文档声明其目的是“?0%(或更?的精力解?0%(或更?Java/XML问题?Ҏ学习曲线假定?0%)。JDOM对于大多数Java/XML应用E序来说当然是有用的Qƈ且大多数开发者发现API比DOMҎ理解得多。JDOMq包括对E序行ؓ的相当广泛检查以防止用户做Q何在XML中无意义的事。然而,它仍需要您充分理解XML以便做一些超出基本的工作(或者甚至理解某些情况下的错?。这也许是比学习DOM或JDOM接口都更有意义的工作?<br /><br />  JDOM自n不包含解析器。它通常使用SAX2解析器来解析和验证输入XML文档(管它还可以以前构造的DOM表示作ؓ输入)。它包含一些{换器以将JDOM表示输出成SAX2事g、DOM模型或XML文本文档。JDOM是在Apache许可证变体下发布的开放源码?<br /><br />  Bean文gQ?<br /><br />  package com.test; <br /><br />  import java.io.*;import java.util.*;import org.jdom.*;import org.jdom.input.*; <br /><br />  public class MyXMLReader { <br /><br />  public static void main(String arge[]) { <br /><br />  long lasting = System.currentTimeMillis(); <br /><br />  try { <br /><br />   SAXBuilder builder = new SAXBuilder(); <br /><br />   Document doc = builder.build(new File("data_10k.xml")); <br /><br />   Element foo = doc.getRootElement(); <br /><br />   List allChildren = foo.getChildren(); <br /><br />   for(int i=0;iQallChildren.size();i++) { <br /><br />    System.out.print("车牌L:" + ((Element)allChildren.get(i)).getChild("NO").getText()); <br /><br />    System.out.println("车主地址:" + ((Element)allChildren.get(i)).getChild("ADDR").getText()); <br /><br />   } <br /><br />  } catch (Exception e) { <br /><br />   e.printStackTrace(); <br /><br />  } <br /><br />  System.out.println("q行旉Q? + (System.currentTimeMillis() - lasting) + "毫秒");}} <br /><br />  10k消耗时_125 62 187 94 <br /><br />  100k消耗时_704 625 640 766 <br /><br />  1000k消耗时_27984 30750 27859 30656 <br /><br />  10000k消耗时_OutOfMemoryError <br /><br />  最后是DOM4J http://dom4j.sourceforge.net/ <br /><br />  虽然DOM4J代表了完全独立的开发结果,但最初,它是JDOM的一U智能分支。它合ƈ了许多超出基本XML文档表示的功能,包括集成的XPath支持、XML Schema支持以及用于大文档或化文档的基于事件的处理。它q提供了构徏文档表示的选项Q它通过DOM4J API和标准DOM接口hq行讉K功能。从2000下半q开始,它就一直处于开发之中?<br /><br />  为支持所有这些功能,DOM4J使用接口和抽象基本类Ҏ。DOM4J大量使用了API中的Collectionsc,但是在许多情况下Q它q提供一些替代方法以允许更好的性能或更直接的编码方法。直接好处是Q虽然DOM4J付出了更复杂的API的代P但是它提供了比JDOM大得多的灉|性?<br /><br />  在添加灵zL、XPath集成和对大文档处理的目标ӞDOM4J的目标与JDOM是一LQ针对Java开发者的易用性和直观操作。它q致力于成ؓ比JDOM更完整的解决ҎQ实现在本质上处理所有Java/XML问题的目标。在完成该目标时Q它比JDOM更少防止不正的应用E序行ؓ?<br /><br />  DOM4J是一个非帔R怼U的Java XML APIQ具有性能优异、功能强大和极端易用使用的特点,同时它也是一个开放源代码的Y件。如今你可以看到来多的Java软g都在使用DOM4J来读写XMLQ特别值得一提的是连Sun的JAXM也在用DOM4J?<br /><br />  Bean文gQ?<br /><br />  package com.test; <br /><br />  import java.io.*;import java.util.*;import org.dom4j.*;import org.dom4j.io.*; <br /><br />  public class MyXMLReader { <br /><br />  public static void main(String arge[]) { <br /><br />  long lasting = System.currentTimeMillis(); <br /><br />  try { <br /><br />   File f = new File("data_10k.xml"); <br /><br />   SAXReader reader = new SAXReader(); <br /><br />   Document doc = reader.read(f); <br /><br />   Element root = doc.getRootElement(); <br /><br />   Element foo; <br /><br />   for (Iterator i = root.elementIterator("VALUE"); i.hasNext();) { <br /><br />    foo = (Element) i.next(); <br /><br />    System.out.print("车牌L:" + foo.elementText("NO")); <br /><br />    System.out.println("车主地址:" + foo.elementText("ADDR")); <br /><br />   } <br /><br />  } catch (Exception e) { <br /><br />   e.printStackTrace(); <br /><br />  } <br /><br />  System.out.println("q行旉Q? + (System.currentTimeMillis() - lasting) + "毫秒");}} <br /><br />  10k消耗时_109 78 109 31 <br /><br />  100k消耗时_297 359 172 312 <br /><br />  1000k消耗时_2281 2359 2344 2469 <br /><br />  10000k消耗时_20938 19922 20031 21078 <br /><br />  JDOM和DOM在性能试时表C佻I在测?0M文档时内存溢出。在文档情况下q值得考虑使用DOM和JDOM。虽然JDOM的开发者已l说明他们期望在正式发行版前专注性能问题Q但是从性能观点来看Q它实没有值得推荐之处。另外,DOM仍是一个非常好的选择。DOM实现q泛应用于多U编E语a。它q是许多其它与XML相关的标准的基础Q因为它正式获得W3C推荐(与基于非标准的Java模型相对)Q所以在某些cd的项目中可能也需要它(如在JavaScript中用DOM)?<br /><br />  SAX表现较好Q这要依赖于它特定的解析方式。一个SAX即到来的XML,但ƈ没有载入到内?当然当XML被dӞ会有部分文档暂时隐藏在内存中)?<br /><br />  无疑QDOM4J是这场测试的莯者,目前许多开源项目中大量采用DOM4JQ例如大名鼎鼎的Hibernate也用DOM4J来读取XML配置文g。如果不考虑可移植性,那就采用DOM4J吧!(?rosenQ?转蝲文章请保留出处:<a >Java?www.javajia.com)</a>) <p>更多_ֽ文章Q?a >主题文章</a>: <a class="pn-title" >Java中四UXML解析技术之不完全测?/a></p><img src ="http://www.aygfsteel.com/wanspring/aggbug/74993.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/wanspring/" target="_blank">春辉</a> 2006-10-13 14:40 <a href="http://www.aygfsteel.com/wanspring/archive/2006/10/13/74993.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>dom4j xml解析http://www.aygfsteel.com/wanspring/archive/2006/10/13/74941.html春辉春辉Fri, 13 Oct 2006 03:15:00 GMThttp://www.aygfsteel.com/wanspring/archive/2006/10/13/74941.htmlhttp://www.aygfsteel.com/wanspring/comments/74941.htmlhttp://www.aygfsteel.com/wanspring/archive/2006/10/13/74941.html#Feedback1http://www.aygfsteel.com/wanspring/comments/commentRss/74941.htmlhttp://www.aygfsteel.com/wanspring/services/trackbacks/74941.html

Parsing XML

One of the first things you'll probably want to do is to parse an XML document of some kind. This is easy to do in dom4j. The following code demonstrates how to this.

import java.net.URL;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.io.SAXReader;

public class Foo {

    public Document parse(URL url) throws DocumentException {
        SAXReader reader = new SAXReader();
        Document document = reader.read(url);
        return document;
    }
}

Using Iterators

A document can be navigated using a variety of methods that return standard Java Iterators. For example

    public void bar(Document document) throws DocumentException {

        Element root = document.getRootElement();

        // iterate through child elements of root
        for ( Iterator i = root.elementIterator(); i.hasNext(); ) {
            Element element = (Element) i.next();
            // do something
        }

        // iterate through child elements of root with element name "foo"
        for ( Iterator i = root.elementIterator( "foo" ); i.hasNext(); ) {
            Element foo = (Element) i.next();
            // do something
        }

        // iterate through attributes of root 
        for ( Iterator i = root.attributeIterator(); i.hasNext(); ) {
            Attribute attribute = (Attribute) i.next();
            // do something
        }
     }

Powerful Navigation with XPath

In dom4j XPath expressions can be evaluated on the Document or on any Node in the tree (such as Attribute, Element or ProcessingInstruction). This allows complex navigation throughout the document with a single line of code. For example.

    public void bar(Document document) {
        List list = document.selectNodes( "http://foo/bar" );

        Node node = document.selectSingleNode( "http://foo/bar/author" );

        String name = node.valueOf( "@name" );
    }

For example if you wish to find all the hypertext links in an XHTML document the following code would do the trick.

    public void findLinks(Document document) throws DocumentException {

        List list = document.selectNodes( "http://a/@href" );

        for (Iterator iter = list.iterator(); iter.hasNext(); ) {
            Attribute attribute = (Attribute) iter.next();
            String url = attribute.getValue();
        }
    }

If you need any help learning the XPath language we highly recommend the Zvon tutorial which allows you to learn by example.

Fast Looping

If you ever have to walk a large XML document tree then for performance we recommend you use the fast looping method which avoids the cost of creating an Iterator object for each loop. For example

    public void treeWalk(Document document) {
        treeWalk( document.getRootElement() );
    }

    public void treeWalk(Element element) {
        for ( int i = 0, size = element.nodeCount(); i < size; i++ ) {
            Node node = element.node(i);
            if ( node instanceof Element ) {
                treeWalk( (Element) node );
            }
            else {
                // do something....
            }
        }
    }

Creating a new XML document

Often in dom4j you will need to create a new document from scratch. Here's an example of doing that.

import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;

public class Foo {

    public Document createDocument() {
        Document document = DocumentHelper.createDocument();
        Element root = document.addElement( "root" );

        Element author1 = root.addElement( "author" )
            .addAttribute( "name", "James" )
            .addAttribute( "location", "UK" )
            .addText( "James Strachan" );
        
        Element author2 = root.addElement( "author" )
            .addAttribute( "name", "Bob" )
            .addAttribute( "location", "US" )
            .addText( "Bob McWhirter" );

        return document;
    }
}

Writing a document to a file

A quick and easy way to write a Document (or any Node) to a Writer is via the write() method.

  FileWriter out = new FileWriter( "foo.xml" );
  document.write( out );

If you want to be able to change the format of the output, such as pretty printing or a compact format, or you want to be able to work with Writer objects or OutputStream objects as the destination, then you can use the XMLWriter class.

import org.dom4j.Document;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.XMLWriter;

public class Foo {

    public void write(Document document) throws IOException {

        // lets write to a file
        XMLWriter writer = new XMLWriter(
            new FileWriter( "output.xml" )
        );
        writer.write( document );
        writer.close();


        // Pretty print the document to System.out
        OutputFormat format = OutputFormat.createPrettyPrint();
        writer = new XMLWriter( System.out, format );
        writer.write( document );

        // Compact format to System.out
        format = OutputFormat.createCompactFormat();
        writer = new XMLWriter( System.out, format );
        writer.write( document );
    }
}

Converting to and from Strings

If you have a reference to a Document or any other Node such as an Attribute or Element, you can turn it into the default XML text via the asXML() method.

        Document document = ...;
        String text = document.asXML();

If you have some XML as a String you can parse it back into a Document again using the helper method DocumentHelper.parseText()

        String text = "<person> <name>James</name> </person>";
        Document document = DocumentHelper.parseText(text);

Styling a Document with XSLT

Applying XSLT on a Document is quite straightforward using the JAXP API from Sun. This allows you to work against any XSLT engine such as Xalan or SAXON. Here is an example of using JAXP to create a transformer and then applying it to a Document.

import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;

import org.dom4j.Document;
import org.dom4j.io.DocumentResult;
import org.dom4j.io.DocumentSource;

public class Foo {

    public Document styleDocument(
        Document document, 
        String stylesheet
    ) throws Exception {

        // load the transformer using JAXP
        TransformerFactory factory = TransformerFactory.newInstance();
        Transformer transformer = factory.newTransformer( 
            new StreamSource( stylesheet ) 
        );

        // now lets style the given document
        DocumentSource source = new DocumentSource( document );
        DocumentResult result = new DocumentResult();
        transformer.transform( source, result );

        // return the transformed document
        Document transformedDoc = result.getDocument();
        return transformedDoc;
    }
}



春辉 2006-10-13 11:15 发表评论
]]>
վ֩ģ壺 | | | | | ƽ| | »| | ĵ| | | | | | Ͳ| ̨| | | IJ| | ʱ| | | п| | | | | Ȩ| | ۶| | | | ͨ| ¹| ̨| ¹| | |