2014年2月20日 星期四

dom4j - 新增,修改,刪除xml namespace屬性

新增:

Namespace ns2 = new Namespace("ns1","http://ns.chinatrust.com.tw/XSD/CTCB/ESB/Message/EMF/ServiceBody");
((Element)nodeB).add(ns2);

修改:
Namespace ns2 = new Namespace("ns1","http://ns.chinatrust.com.tw/XSD/CTCB/ESB/Message/EMF/ServiceBody");
QName newQName = new QName(nodeB.getName(), ns2);
((Element)nodeB).setQName(newQName);

刪除:
for(Namespace e : ((Element)nodeE).declaredNamespaces()){
  ((Element)nodeE).remove(e);
}

需注意的是,刪除,仍會保留當前使用的該namespace的定義,例如原有XML如下:

<ns0:ServiceEnvelope xmlns:ns0="http://ns.chinatrust.com.tw/XSD/CTCB/ESB/Message/EMF/ServiceEnvelope" xmlns:ns2="http://ns.chinatrust.com.tw/XSD/CTCB/ESB/Message/BSMF/ccMrchntProfileInqRq/01" xmlns:ns1="http://ns.chinatrust.com.tw/XSD/CTCB/ESB/Message/EMF/ServiceHeader">
</ns0:ServiceEnvelope >


但因為ServiceEnvelope本身是在ns0之下,因此就算執行了刪除,還是會保留住ns0的定義如下:
<ns0:ServiceEnvelope xmlns:ns0="http://ns.chinatrust.com.tw/XSD/CTCB/ESB/Message/EMF/ServiceEnvelope"></ns0:ServiceEnvelope >

沒有留言:

張貼留言