这几天被同事问道是否可以用dom4j来操作代用命名空间的xml(类似:afd1b592eb54a8152da01b4e485c98b0这种标签)
由于没有研究过,同事决定使用java自带的api来编写。
今天有时间变查了一下资料,后来发现dom4j完全可以胜任这项工作。网上有很多代码,看来看去云里雾里的。后来看到一个网友写到(直接用冒号后边的标签就能取到),试了一下,果真可以。
下面写了一个测试例子,有xml的读写操作。有兴趣的朋友可以参考,代码比较简单,就不过多的介绍。
import java.io.file;
import java.io.filewriter;
import java.io.ioexception;
import java.util.list;
import org.dom4j.document;
import org.dom4j.documentexception;
import org.dom4j.documenthelper;
import org.dom4j.element;
import org.dom4j.namespace;
import org.dom4j.io.saxreader;
import org.dom4j.io.xmlwriter;
import org.junit.test;
public class testoperxml {
//@test
public void testofreader(){
string filename = "d:\\tb_user1.xml";
saxreader reader = new saxreader();
try {
document doc = reader.read(new file(filename));
element root = doc.getrootelement();
element content = root.element("xmi.content");
println(content.getname());
element catalog = content.element("catalog");
println(catalog.getname());
namespace np = catalog.getnamespace();
println(catalog.getnamespace().getprefix());
println("xmi.id:"+catalog.attribute("xmi.id").gettext());
println("name:"+catalog.attribute("name").gettext());
println("visibility:" + catalog.attribute("visibility").gettext());
} catch (documentexception e) {
e.printstacktrace();
}
}
//@test
public void testofwriter(){
document doc = documenthelper.createdocument();
element root = doc.addelement("xmi");
root.addnamespace("cwm", "org.omg.cwm1.0").addnamespace("cwmrdb", "org.omg.cwm1.0/relational")
.addnamespace("cwmolap", "org.omg.cwm1.0/olap").addnamespace("cwmtfm", "org.omg.cwm1.0/transformation")
.addattribute("xmi.version", "1.1").addattribute("timestamp", "5月 23 2016 13:10:03");
element xmlheader = root.addelement("xmi.header");
element documentation = xmlheader.addelement("xmi.documentation");
documentation.addelement("xmi.exporter").settext("meta integration model bridge");
documentation.addelement("xmi.exporterversion").settext("6.0.3 - jan 28 2009 18:35:56");
xmlheader.addelement("metamodel").addattribute("xmi.name", "cwm").addattribute("xmi.version", "1.0");
element content = root.addelement("xmi.content");
element catalog = content.addelement("cwmrdb:catalog").addattribute("xmi.id", "_4").addattribute("name", "model_1")
.addattribute("visibility", "public");
catalog.addnamespace("cwmrdb", "org.omg.cwm1.0/relational");
element schema = catalog.addelement("cwm:namespace.ownedelement").addnamespace("cwm", "org.omg.cwm1.0").addelement("schema");
schema.addnamespace("cwmrdb", "org.omg.cwm1.0/relational");
schema.addelement("cwm:namespace.ownedelement").addnamespace("cwm", "org.omg.cwm1.0");
try {
xmlwriter writer = new xmlwriter(new filewriter("out.xml"));
writer.write(doc);
writer.close();
} catch (ioexception e) {
e.printstacktrace();
}
}
@test
public void testofxpath(){
string filename = "d:\\tb_user1.xml";
saxreader reader = new saxreader();
try {
document doc = reader.read(new file(filename));
list list = doc.selectnodes("//xmi/xmi.content/cwmrdb:catalog");
for(object o : list){
element ele = (element)o;
println(ele.getname());
list list1 = ele.selectnodes("//cwmrdb:catalog");
println(list1);
}
}catch(exception e){
e.printstacktrace();
}
}
private void println(object o){
if(o == null){
system.out.println(":>> null ");
}else{
system.out.println(":>> "+o.tostring());
}
}
}
xml代码:
<?xml version="1.0" encoding="utf-8"?>
<xmi xmlns:cwm="org.omg.cwm1.0" xmlns:cwmrdb="org.omg.cwm1.0/relational"
xmlns:cwmolap="org.omg.cwm1.0/olap" xmlns:cwmtfm="org.omg.cwm1.0/transformation" xmi.version="1.1" timestamp="5月 23 2016 13:10:03">
<xmi.header>
<xmi.documentation>
<xmi.exporter>meta integration model bridge</xmi.exporter>
<xmi.exporterversion>6.0.3 - jan 28 2009 18:35:56</xmi.exporterversion>
</xmi.documentation>
<xmi.metamodel xmi.name="cwm" xmi.version="1.0"/>
</xmi.header>
<xmi.content>
<cwmrdb:catalog xmi.id="_4" name="model_1" visibility="public">
<cwm:namespace.ownedelement>
<cwmrdb:schema xmi.id="_5" name="unnamed_5" visibility="public" namespace="_4">
<cwm:namespace.ownedelement></cwm:namespace.ownedelement>
</cwmrdb:schema>
</cwm:namespace.ownedelement>
</cwmrdb:catalog>
<cwm:catalog></cwm:catalog>
</xmi.content>
</xmi>
以上就是详解dom4j操作带冒号的xml示例代码的详细内容。