科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道使用dom4j解析xml

使用dom4j解析xml

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

使用dom4j解析xml

作者:zhaoran996 来源:赛迪网技术社区 2007年11月29日

关键字: XML 解析 dom4j

  • 评论
  • 分享微博
  • 分享邮件
dom4j 是一种解析 xml 文档的开放源代码 xml 框架。本文介绍如何使用包含在 dom4j 中的解析器创建并修改 xml 文档。 $!dmD>+  
dom4j api 包含一个解析 xml 文档的工具。本文中将使用这个解析器创建一个示例 xml 文档。清单 1 显示了这个示例 xml 文档,catalog.xml。 7.[ ,EWloA  
`r,>JI dX  
清单 1. 示例 xml 文档(catalog.xml) Q4];l.)(  
EsBGWG  
<?xml version="1.0" encoding="utf-8"?> VEOz5 1F  
<catalog> gyi.A.#0  
<!--an xml catalog--> aHyRqrX  
<?target instruction?> <Td:@A} .  
<journal title="xml zone" U%LTOMJ  
            publisher="ibm developerworks"> 5D#y'   
w^4TGv=X  
<article level="intermediate" date="december-2001"> ./|Iq]Y  
<title>java configuration with xml schema</title> 2=|YLN  
<author> r&\dKnt  
  <firstname>marcello</firstname> Ex=,}^\W1  
  <lastname>vitaletti</lastname> }5^3 *- 1  
</author> l%mz(k1  
</article> ~de~G ~U  
</journal> qXwXDm\g  
</catalog> qVd&RV]b  
c2wH(  
6hU6enki5  
cNP{B  
然后使用同一个解析器修改 catalog.xml,清单 2 是修改后的 xml 文档,catalog-modified.xml。 -7{wXP$  
sg$KA @_  
清单 2. 修改后的 xml 文档(catalog-modified.xml) UqWr\t)  
T/[%j57  
<?xml version="1.0" encoding="utf-8"?> 0i&. vob  
<catalog> Me/PybS  
<!--an xml catalog--> dE*W89R A  
<?target instruction?>  + R2 :y  
<journal title="xml zone" F"mhJp  
            publisher="ibm developerworks"> G]()J%c-s  
wY\{ s9/  
<article level="introductory" date="october-2002"> pEFq\I aBA  
<title>create flexible and extensible xml schemas</title> p{;xElr  
<author> dB|mm" ,  
  <firstname>ayesha</firstname> dx= [/  
  <lastname>malik</lastname> at=KN  
</author> jq6wZ@h  
</article> Pfl{"8vS7  
</journal> [8!{,Z  
</catalog> I@6*kE*g  
gXq1  
;$MRRl%30  
 4 , .[  
与 w3c dom api 相比,使用 dom4j 所包含的解析器的好处是 dom4j 拥有本地的 xpath 支持。dom 解析器不支持使用 xpath 选择节点。 #d*)cm7  
Q|qk[3  
本文包括以下几个部分: iTE(?k  
F Wjc"y  
预先设置 wwQfkCa  
创建文档 zC9YZ  
修改文档 qnths !  
预先设置 1sLqZn(>  
;)HX2  
这个解析器可以从 http://dom4j.org 获取。通过设置使 dom4j-1.4/dom4j-full.jar 能够在 classpath 中访问,该文件中包括 dom4j 类、xpath 引擎以及 sax 和 dom 接口。如果已经使用了 jaxp 解析器中包含的 sax 和 dom 接口,向 classpath 中增加 dom4j-1.4/dom4j.jar 。 dom4j.jar 包括 dom4j 类和 xpath 引擎,但是不含 sax 与 dom 接口。 O]_ ] K]  
17}e4xll  
Z 7u]][|  
ZW|o:q#j  
FzSGo K  
1jpF?JvP<  
回页首 )qeuO+  
xa}F + )V  
lZg H"*4  
Kv8m6u{  
创建文档 /j ovyA  
(x> tzsX  
本节讨论使用 dom4j api 创建 xml 文档的过程,并创建示例 xml 文档 catalog.xml。 }"Y^}/s6  
#l:%s\,I  
使用 import 语句导入 dom4j api 类: IIi!gZ\F  
o3uU.B8/  
NSS"A&P  
import org.dom4j.document; >]pml94  
import org.dom4j.documenthelper; CY6o0s>  
import org.dom4j.element; LlPgWb;=U  
a\Z%,&}F  
Vts `R15*  
trRPU#QA  
使用 documenthelper 类创建一个文档实例。 documenthelper 是生成 xml 文档节点的 dom4j api 工厂类。 th}O2F"  
o?g#$U  
document document = documenthelper.createdocument(); jZ!hEId)c  
|%N`F^koo  
$;7dt 7+  
使用 addelement() 方法创建根元素 catalog 。 addelement() 用于向 xml 文档中增加元素。 \k#ve_X3x  
cq y  
element catalogelement = document.addelement("catalog"); G*~`(T  
{AHAuEN9  
6lSi2  
在 catalog 元素中使用 addcomment() 方法添加注释“an xml catalog”。 N" Rd)W  
"+pr  
catalogelement.addcomment("an xml catalog"); "dC# $?27r  
f>5+ ({L_  
bz7in1O $  
在 catalog 元素中使用 addprocessinginstruction() 方法增加一个处理指令。 : 6!2h<I  
>oCW Put  
catalogelement.addprocessinginstruction("target","text"); 2-@577\O8_  
y!:s7)!  
H}{B\7aU  
在 catalog 元素中使用 addelement() 方法增加 journal 元素。 )M``oG7sQ  
^YmH.-G  
element journalelement = catalogelement.addelement("journal"); ,r+*!  
'*:D> Ro  
6c#{dSU  
使用 addattribute() 方法向 journal 元素添加 title 和 publisher 属性。 eXB,qQ  
XO8e*vz~fW  
journalelement.addattribute("title", "xml zone"); z6R`Z8i2  
      journalelement.addattribute("publisher", "ibm developerworks"); v F`7ecmS  
86Y\u/-"n  
h;p?aT,  
向 article 元素中添加 journal 元素。 YkLQ DhR{  
y"<D  
element articleelement=journalelement.addelement("article"); y+2ciF&\M  
T!yWlT~aR  
PW^II5P  
为 article 元素增加 level 和 date 属性。 6=>g8Pb  
7x6` tn)Kz  
articleelement.addattribute("level", "intermediate"); ~;s[\J  
    articleelement.addattribute("date", "december-2001"); 4S8f8px  
.WXf=&8m+  
h3>7wa;x  
向 article 元素中增加 title 元素。 g_]hA  
o>M |9K  
element titleelement=articleelement.addelement("title"); 3FqZ4boU%%  
ffFrvkufE  
9}FZ  
使用 settext() 方法设置 article 元素的文本。 F"mV~)^8  
X7<e>vk  
titleelement.settext("java configuration with xml schema"); )y\v Wo:~  
<zR~R~l  
'`n? $6  
在 article 元素中增加 author 元素。 ny= yl+pv9  
&c='Bm;c  
element authorelement=articleelement.addelement("author"); 4|k)=w K@x  
4m8Ete{?  
,5N0\ TN<M  
在 author 元素中增加 firstname 元素并设置该元素的文本。 p )50se  
ehP9trL~  
element firstnameelement=authorelement.addelement("firstname"); Vex7X:~  
  firstnameelement.settext("marcello"); mNzP7n.CWO  
*jUk3lR^B  
H-<'1G)W  
在 author 元素中增加 lastname 元素并设置该元素的文本。 9xE2\`Fk2  
3}6%uYmq&  
element lastnameelement=authorelement.addelement("lastname"); pJU0PKT  
  lastnameelement.settext("vitaletti"); G Nf^H<  
%VfpC_=Z  
'c5 R qf  
可以使用 adddoctype() 方法添加文档类型说明。 _m4bBO$  
K XmP  
document.adddoctype("catalog", null,"file://c:/dtds/catalog.dtd"); Zm-LI/D  
9kXm-7 5  
a;_8Mf  
这样就向 xml 文档中增加文档类型说明: 2)Ihs|q/X  
;p04,}nF  
<!doctype catalog system "file://c:/dtds/catalog.dtd"> PRL||iU  
%|1yjX07e  
Uz{L|bs-C  
如果文档要使用文档类型定义(dtd)文档验证则必须有 doctype。 p 9Eb+}  
. L[c""K  
xml 声明 <?xml version="1.0" encoding="utf-8"?> 自动添加到 xml 文档中。 X*|R9a4QK  
T/cL>~  
清单 3 所示的例子程序 xmldom4j.java 用于创建 xml 文档 catalog.xml。 QkF=z87&|  
ZNb8~<{m  
清单 3. 生成 xml 文档 catalog.xml 的程序(xmldom4j.java) *py(vv2  
JUH8lEt  
import org.dom4j.document; $ r$mE  
import org.dom4j.documenthelper; $a:_$V  
import org.dom4j.element; LmYvkrmm6  
import org.dom4j.io.xmlwriter; {`~Mcd&aK  
import java.io.*; K.f8RgY  
Gl-l_qbz  
hEC1.<qV  
public class xmldom4j{ 3IlMvcg  
j^N6tO "  
qB.@S7  
public void generatedocument(){ +EUh IEPN  
document document = documenthelper.createdocument(); <Ce2!S9rzL  
  element catalogelement = document.addelement("catalog"); Bkj#49.X@  
  catalogelement.addcomment("an xml catalog"); w{)NG?>  
  catalogelement.addprocessinginstruction("target","text"); 50a_R*8  
  element journalelement = catalogelement.addelement("journal"); j=wp{+J/  
  journalelement.addattribute("title", "xml zone"); Z2 zd7o  
  journalelement.addattribute("publisher", "ibm developerworks"); 3;cc/,uN>  
eTjP=N: i  
N@4_;Uu'A  
  element articleelement=journalelement.addelement("article"); -"^#sZJr  
  articleelement.addattribute("level", "intermediate"); YM@ \]E  
  articleelement.addattribute("date", "december-2001"); m#@9' }O  
  element titleelement=articleelement.addelement("title"); Y4Zf>2uv@  
  titleelement.settext("java configuration with xml schema"); !]HD-/  
  element authorelement=articleelement.addelement("author"); 3=Ka?81KL  
  element firstnameelement=authorelement.addelement("firstname"); /BIu yc4  
  firstnameelement.settext("marcello"); pgbY+_E*T  
  element lastnameelement=authorelement.addelement("lastname"); k`]+/u>\  
  lastnameelement.settext("vitaletti"); mi2\N2  
` .FQh]  
  document.adddoctype("catalog", .ED)WF*  
                  null,"file://c:/dtds/catalog.dtd"); 8lt<X]-O5  
  try{ -07"GQZ8vd  
  xmlwriter output = new xmlwriter( m%RAzfP  
        new filewriter( new file("c:/catalog/catalog.xml") )); kE(@g  
    output.write( document ); D5,%_{fO  
    output.close(); q9q.~?`/  
    } _.oLAe_R~X  
  catch(ioexception e){system.out.println(e.getmessage());} nJXPg1On$q  
} @+:%(\*%  
#WY @lw w  
public static void main(string[] argv){ {to d2-0V  
xmldom4j dom4j=new xmldom4j(); Y{G]A}S8  
dom4j.generatedocument(); Fqm=\nSF%  
}}
查看本文来源
    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章