JDOM与DOM的相互转换

本文介绍了DOM与JDOM两种XML解析方式之间的相互转换方法,包括Document级别的转换及Element级别的详细实现过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、DOM2JDOM采用如下方法,不过,这里只能是Document之间的转换:

public static org.jdom.Documentconvert(org.w3c.dom.DocumentdomDoc)
throwsJDOMException,IOException
... {
//CreatenewDOMBuilder,usingdefaultparser
DOMBuilderbuilder=newDOMBuilder();
org.jdom.DocumentjdomDoc
=builder.build(domDoc);
returnjdomDoc;
}

二、JDOM2DOM,分别采用如下方法:
1、Document之间的转换:

public static org.w3c.dom.DocumentJDomDoc2Dom(org.jdom.DocumentjdomDoc) throws Exception ... {
DOMOutputteroutputter
=newDOMOutputter();
returnoutputter.output(jdomDoc);
}

2、Element之间的转换,采用如下两个方法,演示的是将一个jdom的Element转换成w3c的Element,并将其附加到指定的W3C的Document下:

/***/ /**
*将由JDOM返回的如下结果ELEMENT:
*<Response>
*<Data>
*<Record>
*<id/>
*</name>
*</Record>
*</Data>
*</Response>
*转换到由w3c的Document中
*
@paramdocw3c的Document
*
@paramelementJDom的Element
*
@return由JDom返回结果Element转换到w3cDocumentElement并附加到其指定的路径
*
@throwsDOMException
*
@throwsException
*/

public static Documentconvert(org.w3c.dom.Documentdoc,org.jdom.Elementelement) throws DOMException,Exception ... {
org.w3c.dom.Elementroot
=null,response=null;
intlayer=1;
root
=doc.getDocumentElement();
response
=convertElement2Dom(doc,element,layer);
//System.out.println("convertElement2Dom结果:"+XmlUtil._node2String(response));
root.getElementsByTagName("data").item(0).appendChild((Node)response);
returndoc;
}

/***/ /**
*将JDom的Element转换成org.w3c.dom.Element
*
@paramdocorg.w3c.dom.Document
*
@paramelementorg.jdom.Element
*
@paramlayer用于判断是否第一层,第一层不用其自身的名称创建结点,用Response代替,只起判断做用
*
@returnorg.w3c.dom.Element
*
@throwsDOMException
*
@throwsException
*/

private static org.w3c.dom.ElementconvertElement2Dom(org.w3c.dom.Documentdoc,org.jdom.Elementelement, int layer) throws DOMException,Exception ... {
org.w3c.dom.Elementelement3c
=null;
if(layer==1)...{
element3c
=doc.createElement("Response");
}
else...{
element3c
=doc.createElement(element.getName());
}

layer
++;
ListlistChildren
=element.getChildren();
Stringelename
="";
Stringelevalue
="";
if(listChildren.size()>0)...{//有下级节点
ListlistElement=element.getContent();
for(inti=0;i<listElement.size();i++)...{
org.jdom.ElementtmpElement
=(org.jdom.Element)listElement.get(i);
element3c.appendChild(convertElement2Dom(doc,tmpElement,layer));

}

}
else...{//无下级节点
elename=element.getName();//名称
elevalue=element.getText();//
element3c=doc.createElement(elename);
BNXmlUtil.setNodeValue(element3c,elevalue);
//给结点赋值(BNXmlUtil为普元EOS类,可换其它设值)
ListeleAttr=element.getAttributes();
for(inti=0;i<eleAttr.size();i++)...{//增加赋性值
Attributeattr=(Attribute)eleAttr.get(i);
StringattrName
=attr.getName();
StringattrValue
=attr.getValue();
element3c.setAttribute(attrName,attrValue);
}

//System.out.println("名称:"+elename+"-值:"+elevalue);


}

returnelement3c;
}

参考:
http://www.ibm.com/developerworks/java/library/x-tipcdm.html (Converting from DOM)
http://www.ibm.com/developerworks/xml/library/x-tipcjdm.html (Converting from JDOM)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值