??xml version="1.0" encoding="utf-8" standalone="yes"?>国产精品视频永久免费播放,亚洲男女自偷自拍,亚洲午夜精品久久久久久久久久久久http://www.aygfsteel.com/songfei/category/5000.htmlƢ迎艛_的加?/description>zh-cnTue, 27 Feb 2007 12:00:03 GMTTue, 27 Feb 2007 12:00:03 GMT60HTML操作XML数据岛,数据l定 http://www.aygfsteel.com/songfei/articles/66434.html天外飞仙天外飞仙Tue, 29 Aug 2006 06:31:00 GMThttp://www.aygfsteel.com/songfei/articles/66434.htmlhttp://www.aygfsteel.com/songfei/comments/66434.htmlhttp://www.aygfsteel.com/songfei/articles/66434.html#Feedback0http://www.aygfsteel.com/songfei/comments/commentRss/66434.htmlhttp://www.aygfsteel.com/songfei/services/trackbacks/66434.html目前Q许多Web|站的内Ҏ据都存放在数据库或数据文件中。对于WebE序开发h员来_如果要想把有用的信息从数据库中提取出来,传统的方法是在服务器端编写脚本程序(如VBScript、JavaScript、CGI、ASP、Perl{等Q,通过Ҏ据库执行SQL查询得到相关记录Q然后把查询l果l织成HTML面q回l客LQ用户用浏览器观察最l结果。?br />Z提高pȝ服务的灵zL、可扩展性,使服务对象范围更q,许多商业|站都尽可能地把商务规则、原始数据和表现形式当做怺独立的服务分别提供。HTML那种蕴数据于昄之中的方式显然不合乎q种需求。因此,把原始数据存攑֜XML文档中,使用样式单文件显C内ҎXML技术适合于电子商务的优势所在。但从本质上来说QXSL技术不是面向数据显C的Q它是一U格式{换技术,在显C手D和方式上都q不及HTML那样丰富。对~程人员来说Q一U较为理想的Ҏ是把HTML和XML两种技术相l合Q优势互补,使真正的原始数据在能够保持本来意义和l构的同Ӟq能充分利用HTML那千变万化的昄技巧。XML数据岛就是这U技术融合的产物Q它使用<XML>标签把XML数据直接嵌入到HTML面中,从而实C二者的优势互补。?br />
Q、IE中数据岛的处理方式?br />Z能够处理q种内嵌XML代码的HTML面QInternet Explorer 4.0Q以下简UIE 4.0Q引入了DSOQData Source ObjectsQ数据源对象Q技术,用Java Applet实现。?br />例如Q?br /><APPLET CODE=“com.ms.xml.dso.XMLDSO.class” ID=“xmldso” WIDTH=0 HEIGHT=0 MAYSCRIPT=TRUE> 
<PARAM NAME=“URL” VALUE=“myXML.xml?gt; 
</APPLET> 
上述例子中,CODE属性指明了DSO Java程序,MAYSCRIPT属性保证用L脚本能够处理数据对象QPARAM标签指明了XML文档的位|。?br />使用Java的局限性在于只能在HTML文档中说明XML的URL地址Q而不能直接将XML标签嵌入其中Q这和真正的数据岛Ҏq有一定的差距。微软在Internet Explorer 5.0Q以下简UIE 5.0Q中对DSO技术进行了扩展Q突破了以往的限Ӟ使HTML和XML真正地融合到了一赗HTML面中支持直接?lt;XML>标签。?br />例如Q?br /><HTML> 
<XML ID=“xmldso?gt; 
<?xml version=?.0?> 
some XML……?br /></XML> 
只要保证每个数据岛的ID都是唯一的,可以在面中的M必要的地方嵌入数据岛Qƈ且这些DSO彼此都是怺独立的。?br />除了上面例子中的q种直接嵌入方式Q还可以使用外部引用方式链接数据岛。?br />例如Q?br /><XML ID=“xmldso” SRC=“myXML.xml?gt; 
</XML> 
q样Q只有当公司的客户对象l用IE 4.0Qƈ且ؓ了解册部分客户的兼Ҏ问题时QJava Applet才是~程人员要考虑的选择Ҏ。?br />在IE 5.0所实现的DSO技术中Q如果数据是通过SQL语言Ҏ据库q行查询得到的结果,那么把它们存放在ADOQActiveX Data ObjectsQ记录集中。服务器把这UActiveX控gQ通常是ADO记录集)发送到客户端,由客L脚本E序做进一步的处理。实际上QIE 5.0是把XML数据岛作ZU特D的ADO记录集进行处理的。?br />
Q、XML的数据绑定?br />Q?QADO记录集的映射 
XML中的每一条主元素都被映射为ADO记录集中的一条记录,而子元素则相应地被映到记录集中的字D(也称为域Q。?br />例如Q存在XML数据岛books.xml如下Q?br /><XML ID=“xmldso?gt; 
<?xml version=?.0?> 
<booklist> 
<book> 
<title>Straight Talk About Computers</title> 
<isbn>72-80088-005</isbn> 
</book> 
<book> 
<title> Gourmet Microwave </title> 
<isbn>72-80081-082</isbn> 
</book> 
</booklist> 
</XML> 
此时Q映后的ADO记录集ؓQ?br />title isbn 
Straight Talk About Computers 72-80088-005 
Gourmet Microwave 72-80081-082 
 
Q?Q与HTML元素的绑定?br />
在HTML文档中嵌入数据岛之后Q就可以XML数据岛与HTML元素l定在一赗每一个DSO条目Q即数据岛)都有唯一的ID受首先将HTML元素中的DATASRC属性设|ؓ相应的IDQ就可以把HTML元素和数据岛联系在一赗然后再通过讄DATAFLD属性|来确定所提取的XML元素。?br />
例如Q与DIV元素l定的代码如下: 
<DIV ID=title DATASRC=#xmldso DATAFLD=“title?gt;</DIV> 
<DIV ID=price DATASRC=#xmldso DATAFLD=“isbn?gt;</DIV> 
注意Qƈ非所有的HTML元素都能与XML数据岛绑定。目前,支持q种DSOl定机制的元素如下: 
A、APPLET、BUTTON、DIV、FRAME、IFRAME、 IMG、INPUT (此处cd是:CHECKBOX、HIDDEN、 LABEL、PASSWORD、RADIO和TEXT)、LABEL、 MARQUEE、SELECT、SPAN、TABLE和 TEXTAREA。?br />
Q?Q以表格方式昑ּXML数据 

若把XML数据与TABLE元素l定在一P可以自动地昄为多行的表格形式。?br />例如QXML数据与TABLE元素l定的代码如下: 
<TABLE BORDER=1 DATASRC=?xmldso?gt; 
<THEAD> 
<TR><TH>Title</TH> 
<TH>ISBN</TH></TR> 
</THEAD> 
<TBODY> 
<TR><TD><DIV DATAFLD=“title?gt;</DIV></TD> 
<TD><DIV DATAFLD=“isbn?gt; 
</DIV></TD></TR> 
</TBODY> 
</TABLE> 
q样Q通过TABLE元素中的DATASRC属性设定ؓ#xmldsoQ把两者绑定v来。表格内部分_THEADQ和表体QTBODYQ两部分。每一?lt;book>元素都会昄Z行表|具体每一栏显C哪一Ҏ据,则由DIV元素中的DATAFLD属性指定。?br />

Q、XML的嵌套处理?br />一般情况下Q我们从数据库中查询得到的结果集可能很大Q所以从服务器返回到客户端时Q数据会被分成若q个面分别q行传递。此Ӟ利用TABLE元素中的DATAPAGESIZE属性可以指定每个页面包含记录集条目的个数。?br />例如Q?br /><TABLE DATASRC=?xmldso” DATAPAGESIZE=10> 
很显Ӟ如果XML数据格式是对U的Q则无论是映到ADO记录集还是绑定到表格元素上,效果都会很好。而在实际应用中,XML数据为非对称的例子也很多Q比如一本书的作者可能就不止一位,q在映射和绑定时都会产生一定的ȝ。解决问题的办法是利用嵌套。每一行表g对应一条主元素Q每一栏也对应着一个子元素。对于重复元素,则用嵌套的表格。我们假讑֜books.xml中,W一本书的作者ؓDean StraightQ第二本书的作者ؓCharlotte Cooper、Shelley Burke和Regina Murphy。此Ӟl定q程如下Q?br />● 创建TABLE元素Qƈ数据岛ID赋值给DATAFLD属性; 
● 对于单独的XML元素Q如<isbn>Q创建TD元素Qƈ讑֮相应的DATAFLD属性; 
● 对于重复元素,在TD元素内部嵌套一个表| 
● 用单行单列的Ş式显CZ者信息。?br />注意q里的DATAFLD属性必设定ؓ?TEXT”, 
以保证嵌套元素的内容被全部显C在指定的元素中。?br />完整的HTML代码如下所C: 
<TABLE BORDER=1 DATASRC=?xmldso?gt; 
<THEAD><TR><TH>Title</TH> 
<TH>ISBN</TH> 
<TH>Author</TH></TR></THEAD> 
<TBODY> 
<TR><TD> 
<DIV DATAFLD=“title?gt;</DIV></TD> 
<TD><DIV DATAFLD=“isbn?gt; 
</DIV></TD> 
<TD> 
<TABLE BORDER=0 DATASRC=?xmldso” DATAFLD=“author?gt; 
<TR><TD><SPAN DATAFLD=?Text?gt;</SPAN></TD></TR> 
</TABLE> 
</TD> 
</TR></TBODY> 
</TABLE> 
事实上,使用DSO效果最好的情况是针对结构对U的数据Q而处理非对称数据更有效的办法是用我们以后将要介l的DOM技术。?br />Q、DSO技术的应用 
1Q访问元素的属性?br />用DSO讉K元素的属性很单,可以直接把属性按子元素来处理。?br />例如Q?br /><book isbn=?-001-122-12?gt; 
……?br /></book> 
q样Q在l定到HTML表格中时Q就可以直接按子元素来处理: 
<TD><SPAN DATAFLD=“isbn?gt; </SPAN></TD> 
如果遇到属性名和子元素名一L情况Q在元素名前加上?”进行区分。?br />
2Q遍历记录集 
DSO把XML数据岛当做ADO记录集进行处理的一大好处是可以利用ADO提供的各U方法对数据源进行访问,其是当把数据岛与类似SPAN、DIV和INPUT{HTML元素l定时。通常q些元素昄的是记录集的首条记录Q?/strong>要想对记录集q行遍历览Q可以用ADO的方法? Move、MoveFirst、MoveLast、MoveNext和MovePrevious。比如创Z个按钮响应函敎ͼ只要用户点击“Next”按钮,可以逐条览相应的记录?/font> 
例如Q?br /><XML ID=“xmldso” SRC=“books.xml?gt; 
</XML> 
Sub btnNext_onclick() 
xmldso.RecordSet.MoveNext 
End Sub 

3Q与Script语言相结合?br />有些用户比较习惯~写Script语言Q利用DSO技术同样可以与各种Script很好地结合在一赗?br />例如Q以VB ScriptZQ,讉K记录集时Q代码如?  
Dim rsBooks 
Set rsBooks = xmldso.RecordSet 
讉K字段Q子元素Q的| 
Dim sTitle 
sTitle = rsBooks(“title? 
可以使用innerText和innerHTML属性把得到的g递给HTML元素。例如,有一个DIV元素名ؓdivTitleQ赋g码如下所C: 
divTitle.innerTEXT = sTitle 
利用脚本E序q可以处理许多DSO事gQ下表列举了其中的一部分事gQ?br />事g 触发事g 响应 
onDataAvailable 新数据准备就l 当前运行状态中记录集中条目的个敊W?br />onDataSetComplete 数据源中的所有数据已l到达 显C数据,或返回一个确认消息?br />onDataSetChanged 记录集中的数据修改完毕,可以讉K 昄更新后的数据 
onRowEnter 当前记录指针已经Ud 在显C数据前Ҏ据进行必要的格式化?br /> 
在脚本中处理各种事g的方法就是在<SCRIPT>标签中用FOR属性指定XML数据岛IDQ用EVENT属性确定事件类型。?br />例如Q获取记录集中条目的个数Q?br /><SCRIPT Language=“VB Script” FOR=“xmldso” EVENT=“onDataAvailable?gt; 
lblRecords.value = booklist.RecordSet.RecordCount 
</SCRIPT> 
除了昄记录数据之外Q脚本程序还可以对记录集q行快速查询、排序、编辑等操作。但要指出的是,虽然ADO技术中提供了类似SortColumn和SortAscending{方法对XML数据q行排序Q但是效果不如XSL中的排序操作Q所以徏议大家充分利用XSL技术来实现q部分功能。?br />其余的功能,如利用脚本对记录集进行诸如增加、删除、修改等操作Q或是分|CHTML表格{等Q在q里׃一一举例说明了,用法与前面的操作大同异。最后需要说明的是,所有对DSO对象的操作都是在用户端完成的Q实际上是服务器数据对象的一份复制品Q这样做的好处是避免了网l承受大量数据通信的负担。但q时用户端所做的M操作Ҏ务器上存储的数据毫无影响Q如果要惛_服务器记录也q行修改Q那么就要用到客L与服务器端的数据交换技术,我们在以后Ҏq行介绍。?

天外飞仙 2006-08-29 14:31 发表评论
]]>
XML配置文g的读?sax)http://www.aygfsteel.com/songfei/articles/63903.html天外飞仙天外飞仙Wed, 16 Aug 2006 06:51:00 GMThttp://www.aygfsteel.com/songfei/articles/63903.htmlhttp://www.aygfsteel.com/songfei/comments/63903.htmlhttp://www.aygfsteel.com/songfei/articles/63903.html#Feedback0http://www.aygfsteel.com/songfei/comments/commentRss/63903.htmlhttp://www.aygfsteel.com/songfei/services/trackbacks/63903.htmlXML配置文g的读?sax)
JSP教程-Java与XML
 

在最q的一个MIS目?Z避免编?我需要把一些配|信息写在一个配|文件中.考虑到是J2EE目,J2EE的配|文?br />好像都是xml文g?再用传统ini文g是不是有点落伍了?
ok,qxml做配|文件吧.
我的配置文greportenv.xml如下,比较?

<?xml version="1.0" encoding="utf-8"?>
<reportenv>
<datasource>
<username>sqlname</username>
<password>password</password>
</datasource>
</reportenv>

现在的问题是我用什么来d配置信息?
现在行的是dom4j和sax,我以前一直用dom4j.可是weblogic workshop自带的是sax,我又不想再引入包?于是是sax?
W一?ConfigParser.java
/*
 * Create Date: 2005-6-13
 * Create By: 板桥里h
 * purpose:xml配置文g属性读取器
 */
package com.infoearth.report;

import org.xml.sax.Attributes;
import org.xml.sax.helpers.DefaultHandler;
import org.xml.sax.SAXException;
import java.util.Properties;

public class ConfigParser extends DefaultHandler {

    ////定义一个Properties 用来存放属性?br />    private Properties props;

    private String currentSet;
    private String currentName;
    private StringBuffer currentValue = new StringBuffer();

    //构徏器初始化props
    public ConfigParser() {

        this.props = new Properties();
        }

    public Properties getProps() {
        return this.props;
        }

    //定义开始解析元素的Ҏ. q里是将<xxx>中的名称xxx提取出来.
    public void startElement(String uri, String localName, String qName, Attributes attributes)
    throws SAXException {
        currentValue.delete(0, currentValue.length());
        this.currentName =qName;
        }

    //q里是将<xxx></xxx>之间的值加入到currentValue
    public void characters(char[] ch, int start, int length) throws SAXException {
        currentValue.append(ch, start, length);
        }

    //在遇?lt;/xxx>l束?之前的名称和g一对应保存在props?br />    public void endElement(String uri, String localName, String qName) throws SAXException {
        props.put(qName.toLowerCase(), currentValue.toString().trim());
        }

    }
   
 W二?ParseXML.java
 /*
 * Create Date: 2005-6-13
 * Create By: 板桥里h 李春雷修?br /> * purpose:xml配置文g属性读取器(通用),
 */
 
package com.infoearth.report;

import java.util.Properties;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import java.net.URL;

public class ParseXML{
    //定义一个Properties 用来存放属性?br />    private Properties props;

    public Properties getProps() {
        return this.props;
        }

    public void parse(String filename) throws Exception {
        //我们的解析器对象化
        ConfigParser handler = new ConfigParser();
        //获取SAX工厂对象
        SAXParserFactory factory = SAXParserFactory.newInstance();
        factory.setNamespaceAware(false);
        factory.setValidating(false);
        //获取SAX解析
        SAXParser parser = factory.newSAXParser();
        try{
            //解析器和解析对象xml联系h,开始解?
            parser.parse(filename, handler);
            //获取解析成功后的属?br />            props = handler.getProps();
            }finally{
                factory=null;
                parser=null;
                handler=null;
                }
        }
    }
W三?ReadConfigXml.java
/*
 * Create Date: 2005-6-13
 * Create By: 李春?br /> * purpose:xml配置文g属性读取器
 */

package com.infoearth.report;

import java.util.Properties;

public class ReadConfigXml
{
    private Properties props;
   
    public ReadConfigXml(String url){
  ParseXML myRead = new ParseXML();
   try {
    myRead.parse(url);
                props = new  Properties();
                props = myRead.getProps();
   } catch (Exception e) {
    e.printStackTrace();
   }     
        }
   public  String getUserName(){
        return props.getProperty("username");
        }       
   public String getPassWord(){
        return props.getProperty("password");
    }

}


ok,搞定?d的时候如?
ReadConfigXml xmlread = new ReadConfigXml("reportenv.xml");
String username = xmlread.getUserName();
String password = xmlread.getPassWord();

前两个类实现了xml文档属性设|的Ld.只要是xml的属性?都读Cproperty?你只需在property中提取就可以?
W三个类是我针对我的xml文g写的,g有点多余.呵呵.其实有难a之隐.因ؓ不想q多的改动以前的E序架构,q蛇添
了一?

另外,感谢j?感谢板桥里h.



天外飞仙 2006-08-16 14:51 发表评论
]]>
java操作xml~程实例(sax)http://www.aygfsteel.com/songfei/articles/63882.html天外飞仙天外飞仙Wed, 16 Aug 2006 05:29:00 GMThttp://www.aygfsteel.com/songfei/articles/63882.htmlhttp://www.aygfsteel.com/songfei/comments/63882.htmlhttp://www.aygfsteel.com/songfei/articles/63882.html#Feedback0http://www.aygfsteel.com/songfei/comments/commentRss/63882.htmlhttp://www.aygfsteel.com/songfei/services/trackbacks/63882.htmlXML文档hQ?


<?xml version="1.0"?>
<simple date="7/7/2000" >
<name> Bob </name>
<location> New York </location>
</simple>


代码:
package xmltest;
import javax.xml.parsers.*;
import org.xml.sax.*;
import org.xml.sax.helpers.*;
import java.io.*;

 


public class SaxTest extends DefaultHandler {


// 重蝲DefaultHandlercȝҎ
// 以拦截SAX事g通知?
//
// 关于所有有效事Ӟ见org.xml.sax.ContentHandler
//
public void startDocument( ) throws SAXException {
System.out.println( "SAX Event: START DOCUMENT" );
}

public void endDocument( ) throws SAXException {
System.out.println( "SAX Event: END DOCUMENT" );
}

public void startElement( String namespaceURI,
String localName,
String qName,
Attributes attr ) throws SAXException {
System.out.println( "SAX Event: START ELEMENT[ " +
localName + " ]" );

// 如果有属性,我们也一q打印出来.Q.
for ( int i = 0; i < attr.getLength(); i++ ){
System.out.println( " ATTRIBUTE: " +
attr.getLocalName(i) +
" VALUE: " +
attr.getValue(i) );
}

}

public void endElement( String namespaceURI,
String localName,
String qName ) throws SAXException {
System.out.println( "SAX Event: END ELEMENT[ " +
localName + " ]" );
}

public void characters( char[] ch, int start, int length )
throws SAXException {

System.out.print( "SAX Event: CHARACTERS[ " );

try {
OutputStreamWriter outw = new OutputStreamWriter(System.out);
outw.write( ch, start,length );
outw.flush();
} catch (Exception e) {
e.printStackTrace();
}

System.out.println( " )" );

}


public static void main( String[] argv ){

System.out.println( "Example1 SAX Events:" );
try {

// SAXParserFactory spFactory = SAXParserFactory.newInstance();
// SAXParser sParser = spFactory.newSAXParser();


// 建立SAX 2解析器.Q.
XMLReader xr = XMLReaderFactory.createXMLReader("org.apache.xerces.parsers.SAXParser");

// 安装ContentHandlerQ.Q?
xr.setContentHandler( new SaxTest() );

// 解析文gQ.Q?
xr.parse( new InputSource(
new FileReader( "exampleA.xml" )) );


}catch ( Exception e ) {
e.printStackTrace();
}

}

}
 当前SAX API有两个版本。第二版中的cd和方法名与第一版都有出入,但是代码的结构是一L?br />    SAX是一套APIQ它不是一个解析器Q所以这个代码在XML解析器中是通用的。要让示例跑hQ你需要一个支持SAX v2的XML解析器。我用Apache的Xerces解析?代码如下
// 建立SAX 2解析器.Q.
XMLReader xr = XMLReaderFactory.createXMLReader("org.apache.xerces.parsers.SAXParser");

// 安装ContentHandlerQ.Q?
xr.setContentHandler( new SaxTest() );
SAX API 的说明书通俗易读。它包含了很多的详细内容。而用SAX API的主要Q务就是创Z个实现ContentHandler接口Q一个供XML 解析器调用以分析XML文档时所发生的SAX事g分发l处理程序的回调接口?

方便赯QSAX API也提供了一个已l实CContentHandler接口的DefaultHandler适配器类?

一但实CContentHandler或者扩展了DefaultHandlerc,你只需直接XML解析器解析一个特定的文档卛_?

我们的第一个例子扩展DefaultHandler每个SAX事g打印到控制台。这给你一个初步的映象Q以说明什么SAX事g会发生及以怎样的顺序发生?



天外飞仙 2006-08-16 13:29 发表评论
]]>
谈staxhttp://www.aygfsteel.com/songfei/articles/53294.html天外飞仙天外飞仙Fri, 16 Jun 2006 06:21:00 GMThttp://www.aygfsteel.com/songfei/articles/53294.htmlhttp://www.aygfsteel.com/songfei/comments/53294.htmlhttp://www.aygfsteel.com/songfei/articles/53294.html#Feedback0http://www.aygfsteel.com/songfei/comments/commentRss/53294.htmlhttp://www.aygfsteel.com/songfei/services/trackbacks/53294.html stax(simple stream api for xml)作ؓjsr已经出现几年旉了,可能不如sax,dom(及其他基于其上的工具包比如jdom,jaxp,etc)Z人所知。可能也是因为最qxfire的火?D它的知名度有所提升吧。(?外话Q好象有不少知识点一直都是默默无ȝQ只有随着某项技术的行才突然变的ؓ人所知道了,比如ThreadLocal本来我们一直没有接触,很多人可能一直都不知道它的存在,但随着它在spring ,hibernateq些行的技术里的灵巧的应用Q一下子p很多及及应用了。可见我们的水^q是属于跟在老外屁股后面跑的水^Q?br />通过和dom,saxq两U大家熟知的xml解析方式的比较,可以Ҏ的看出它的特炏V?br />dom通过把整个tree 文档d内存q行操作Q可以随意对文档q行操作Q非常灵zR但~点是对内存的资源耗费比较大?br />sax不同于dom把整个文档读入内存的方式Q它是直接对 xml文gq行操作。速度快,基本上不占用什么内存资源。缺点看看它的名字就知道?simple api for xml),Zevent的方式(q点和staxcMQ,但是是通过callback的方式把对xml的遍历权交给sax parser了。这样导致我们不能灵zL制对xml文g的访问?br />
stax通过stream的方式来解决sax,dom各自的缺点,同时h他们大部分的优点Q我惛_层实现是不是通过直接操作文g的方式Q还没有看它的实现的srcQ不敢ؕ_。stax主要有两中粒度不同的操作方式 Q一U基于event, 另一U更底层的实现基于cursor。初一看实现方式有点象sax,因ؓ都是Zevent的。但是sax把访问控制权交给parser(通过callback))了,我们很难控制iteratq程。stax允许我们自己控制iterat.
所以stax的优点如下:Zstream的方式,不象dom耗费内存资源。又可以自己控制对xml的iteratQ不象sax把控制权交给parser).q有一个优点就是可以在iterat的过E中随时cancel。虽然sax 也可以通过 throw saxexception的方式中断iteratq程Q但毕竟不是一中优的解决Ҏ。当然stax的还提供了以stream的方式进行write xml的操作?br />
?具体的stax应用可以看ibm的系列教E文章,比较老了了点。http://www-128.ibm.com/developerworks/xml/library/x-tipstx/

具体实现Q除了bea的一个ri实现外,不知道还有其他的实现没有Qstax jsr好象最早由bea提出来)Q?br />
个h感觉stax的应用还是有些麻烦,期待Q或则是不是已经有了Q)能有更高层次的封装(cM于jdom,jaxp实现之类的)?br />


天外飞仙 2006-06-16 14:21 发表评论
]]>
java操作XMLhttp://www.aygfsteel.com/songfei/articles/36346.html天外飞仙天外飞仙Mon, 20 Mar 2006 07:57:00 GMThttp://www.aygfsteel.com/songfei/articles/36346.htmlhttp://www.aygfsteel.com/songfei/comments/36346.htmlhttp://www.aygfsteel.com/songfei/articles/36346.html#Feedback0http://www.aygfsteel.com/songfei/comments/commentRss/36346.htmlhttp://www.aygfsteel.com/songfei/services/trackbacks/36346.htmlpackage jp.co.nec.ome.utility.xml;

import java.io.*;
import javax.xml.parsers.*;

import org.w3c.dom.*;
import org.xml.sax.*;

//*****************************************************************************
/**
 * XML文書分析クラわVす?lt;BR>
 * XMLに記qされている定義を分析し、子要素や子要素の内宏V取扱を容易にする
 * ユーティリティクラスです?br /> * <P>
 * @author  Hisaya Saito
 * @version $Revision:   5.2  $ $Date:   20 May 2005 10:24:55  $
 * @since   OpenMeisterEnterprise/EF 3.2
 */
//*****************************************************************************
public class OmXMLAnalyzer {

  //***************************************************************************
  //ゟ냳わVラク?br />  //***************************************************************************

  //***************************************************************************
  /**
   * privateのコミ낹トラクタです?lt;BR>
   * わVティックメソッドのみの利用とし、イミ낹ѝス化は不a可とします?br />   */
  //***************************************************************************
  private OmXMLAnalyzer() {
  }

  //***************************************************************************
  //publicメソッド
  //***************************************************************************

  //***************************************************************************
  /**
   * XMLファイルパスの文字列からXML文書のルヹ{要素を取得します?br />   * @param  argFilePath XMLファイルパス
   * @return ルート要?br />   * @exception FileNotFoundException 何らかの理由でファイルを開くことができない場?br />   * @exception ParserConfigurationException 要求された構成を満たすDocumentBuilderを生成できない場?br />   * @exception SAXException 構文解析エラヹ{発生した場合
   * @exception IOException 入出力エラーが発生した場?br />   */
  //***************************************************************************
  public static Element getRootElement(String argFilePath)
                                           throws FileNotFoundException,
                                                  ParserConfigurationException,
                                                  SAXException,
                                                  IOException {

    Element rootElement = null;

    //XML文書解釈のためのParserの作?br />    File defineFile = new File(argFilePath);
    InputStream inputStream = new FileInputStream(defineFile);
    try {
      DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
      DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();
      Document document = documentBuilder.parse(inputStream);

      //XML文書のツリーの最上位の要素rootを取得します?br />      rootElement = document.getDocumentElement();
    } finally {
      inputStream.close();
    }
    return rootElement;
  }

  //***************************************************************************
  /**
   * 入力わVリームからXML文書のルヹ{要素を取得します?br />   * @param  argInputStream
   * @return ルート要?br />   * @exception FileNotFoundException 何らかの理由でファイルを開くことができない場?br />   * @exception ParserConfigurationException 要求された構成を満たすDocumentBuilderを生成できない場?br />   * @exception SAXException 構文解析エラヹ{発生した場合
   * @exception IOException 入出力エラーが発生した場?br />   */
  //***************************************************************************
  public static Element getRootElement(InputStream argInputStream)
      throws FileNotFoundException,
             ParserConfigurationException,
             SAXException,
             IOException {

    Element rootElement = null;

    //XML文書解釈のためのParserの作?br />    try {
      DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
      DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();
      Document document = documentBuilder.parse(argInputStream);

      //XML文書のツリーの最上位の要素rootを取得します?br />      rootElement = document.getDocumentElement();
    } finally {
      argInputStream.close();
    }
    return rootElement;
  }

  //***************************************************************************
  /**
   * 指定した親要素の中で最初の子要素を取得します?br />   * @param  argParentElement    親要?br />   * @param  argChildElementName 子要素名
   * @return 最初に取得できた子要素
   */
  //***************************************************************************
  public static Element getChildElement(Element argParentElement,
                                        String argChildElementName) {
    return getChildElement(argParentElement, argChildElementName, 0);
  }

  //***************************************************************************
  /**
   * 指定した親要素の中の指定した順番の子要素を取得します?br />   * @param  argParentElement       親要?br />   * @param  argChildElementName         子要素名
   * @param  argSpecificationNumber 順番
   * @return 指定した順番の子要素
   */
  //***************************************************************************
  public static Element getChildElement(Element argParentElement,
                                        String argChildElementName,
                                        int argSpecificationNumber) {
    NodeList childNodeList =
                    argParentElement.getElementsByTagName(argChildElementName);
    return (Element)childNodeList.item(argSpecificationNumber);
  }

  //***************************************************************************
  /**
   * 指定した親要素の中の全ての子要素を配列で取得します?br />   * @param  argParentElement       親要?br />   * @param  argChildElementName    子要素名
   * @return 子要素の配列
   */
  //***************************************************************************
  public static Element[] getChildElementList(Element argParentElement,
                                              String argChildElementName) {
    NodeList childNodeList =
                    argParentElement.getElementsByTagName(argChildElementName);
    int listCount = childNodeList.getLength();
    if(listCount == 0) {
      return null;
    }
    Element[] childElementList = new Element[listCount];
    for (int i0 = 0; i0 < listCount; i0++) {
      childElementList[i0] = (Element)childNodeList.item(i0);
    }
    return childElementList;
  }

  //***************************************************************************
  /**
   * 指定した要素の中で指定する属性の値がa定されている子要素を取得します?br />   * @param  argParentElement    親要?br />   * @param  argChildElementName 子要素名
   * @param  argAttributeName    属性名
   * @param  argAttributeValue   属性の?br />   * @return 指定する属性の値がa定されている子要素で最初に取得できたも?br />   */
  //***************************************************************************
  public static Element getChildElement(Element argParentElement,
                                        String argChildElementName,
                                        String argAttributeName,
                                        String argAttributeValue) {

    NodeList childNodeList = argParentElement.getElementsByTagName(argChildElementName);
    int listLength = childNodeList.getLength();
    if(listLength == 0) {
      return null;
    }
    Element childElement = null;
    for (int i0 = 0; i0 < listLength; i0++) {
      Element localChildElement = (Element)childNodeList.item(i0);
      String attributeValue = localChildElement.getAttribute(argAttributeName);
      if (attributeValue.equals(argAttributeValue)) {
        childElement = localChildElement;
        break;
      }
    }

    return childElement;
  }

  //***************************************************************************
  /**
   * 指定した要素の内宏V取得します?br />   * @param  argElement 内容を取得したい要素
   * @return 内容
   */
  //***************************************************************************
  public static String getElementContents(Element argElement) {
    if(argElement != null) {
      Text text = (Text)argElement.getFirstChild();
      if(text == null) {
        return null;
      }
      return text.getNodeValue();
    } else {
      return null;
    }
  }

  //***************************************************************************
  /**
   * 指定した親要素の中で最初の子要素の内容を取得します?br />   * @param  argParentElement 親要?br />   * @param  argChildElementName  内容を取得したい子要素名
   * @return 内容
   */
  //***************************************************************************
  public static String getChildElementContents(Element argParentElement,
                                               String argChildElementName) {

    Element childElement = getChildElement(argParentElement,
                                           argChildElementName);
    return getElementContents(childElement);
  }

  //***************************************************************************
  /**
   * 指定した親要素の中で指定する属性の値がa定されている子要素の内宏V取得します?br />   * @param  argParentElement    親要?br />   * @param  argChildElementName 内容を取得したい子要素名
   * @param  argAttributeName    属性名
   * @param  argAttributeValue   属性の?br />   * @return 内容
   */
  //***************************************************************************
  public static String getChildElementContents(Element argParentElement,
                                               String argChildElementName,
                                               String argAttributeName,
                                               String argAttributeValue) {

    Element childElement = getChildElement(argParentElement,
                                           argChildElementName,
                                           argAttributeName,
                                           argAttributeValue);
    return getElementContents(childElement);
  }

  //***************************************************************************
  /**
   * 指定した親要素の中で最初の子要素の属性の値を取得します?br />   * @param  argParentElement    親要?br />   * @param  argChildElementName 子要素名
   * @param  argAttributeName    属性名
   * @return 属性の?br />   */
  //***************************************************************************
  public static String getAttributeValue(Element argParentElement,
                                         String argChildElementName,
                                         String argAttributeName) {
    return getAttributeValue(argParentElement, argChildElementName, 0, argAttributeName);
  }

  //***************************************************************************
  /**
   * 指定した親要素の中で指定した順番の子要素の属性の値を取得します?br />   * @param  argParentElement       親要?br />   * @param  argChildElementName    子要素名
   * @param  argSpecificationNumber 順番
   * @param  argAttributeName       属性名
   * @return 属性の?br />   */
  //***************************************************************************
  public static String getAttributeValue(Element argParentElement,
                                         String argChildElementName,
                                         int argSpecificationNumber,
                                         String argAttributeName) {
    Element childElement = getChildElement(argParentElement,
                                           argChildElementName,
                                           argSpecificationNumber);
    return childElement.getAttribute(argAttributeName);
  }
}



天外飞仙 2006-03-20 15:57 发表评论
]]>
վ֩ģ壺 | | | | | Դ| | ˶| | | | º| | | Դ| ɳ| ߴ| | | ΢ɽ| ͨ| ܱ| °Ͷ| Ӽ| | ɳ| °| | ΢| | | | Դ| | | ˳| | ԭ| | | |