您的位置:首页 > 其它

dom4j操作带冒号的xml

2016-06-01 16:46 267 查看

        这几天被同事问道是否可以用dom4j来操作代用命名空间的xml(类似:<CWMRDB:Catalog>这种标签)

由于没有研究过,同事决定使用java自带的api来编写。

今天有时间变查了一下资料,后来发现dom4j完全可以胜任这项工作。网上有很多代码,看来看去云里雾里的。后来看到一个网友写到(直接用冒号后边的标签就能取到),试了一下,果真可以。

        下面写了一个测试例子,有xml的读写操作。有兴趣的朋友可以参考,代码比较简单,就不过多的介绍。

 

 java代码:

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>

 

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: