java compute wmb_WMB入门之十四:在JavaCompute节点中删除输入XML中特定属性及自定义NameSpace节点后再输出...

importjava.util.HashSet;importjava.util.List;importjava.util.Set;importjava.util.regex.Pattern;importcom.ibm.broker.javacompute.MbJavaComputeNode;importcom.ibm.broker.plugin.MbElement;importcom.ibm.broker.plugin.MbException;importcom.ibm.broker.plugin.MbMessage;importcom.ibm.broker.plugin.MbMessageAssembly;importcom.ibm.broker.plugin.MbOutputTerminal;publicclasssubflow_JavaComputeextendsMbJavaComputeNode {publicvoidevaluate(MbMessageAssembly inAssembly)throwsMbException {

MbOutputTerminal out=getOutputTerminal("out");

MbOutputTerminal alt=getOutputTerminal("alternate");

MbMessage inMessage=inAssembly.getMessage();

MbMessage outMessage=newMbMessage(inMessage);

MbMessageAssembly outAssembly=newMbMessageAssembly(inAssembly,outMessage);

MbElement document=outMessage.getRootElement();

MbElement root=document.getLastChild().getFirstChild();try{

SetselfDefNSSet=newHashSet();// 用来存储自定义的名称空间名

traverseAndRemoveNils(root,selfDefNSSet);// 遍历节点删除特定属性if(selfDefNSSet.size()>0){

traverseAndRemoveSelfDefNSNode(root,selfDefNSSet);// 遍历节点删除自定义名称空间节点

}

}catch(Exception ex){

ex.printStackTrace();

}

out.propagate(outAssembly);

}privatevoidtraverseAndRemoveNils(MbElement elm,SetselfDefNSSet)throwsException{//get all the attributes of current elementListattrSet=(List)elm.evaluateXPath("@*");for(MbElement attr:attrSet){

String name=attr.getName().toString();

String value=attr.getValue().toString();if(isNillAttr(name,value)){

attr.detach();

}if(isSelfDefNS(name,value)){

String[] arr=name.split(":");

selfDefNSSet.add(arr[1]);

attr.detach();

}

}//get all sub elements of current elementListnodeset=(List)elm.evaluateXPath("*");for(MbElement childElm:nodeset){//recursiontraverseAndRemoveNils(childElm,selfDefNSSet);

}

}

// 判断是否特定属性,a:nil,b:nil都算privatebooleanisNillAttr(String name,String value){

String patternStr="(\\w+)(:nil)";booleanresult1=Pattern.matches(patternStr, name);booleanresult2="true".equals(value);returnresult1&&result2;

}

// 判断是否自定义名称空间privatebooleanisSelfDefNS(String name,String value){

String patternStr="(xmlns:)(\\w+)";booleanresult=Pattern.matches(patternStr, name);returnresult;

}privatevoidtraverseAndRemoveSelfDefNSNode(MbElement elm,SetselfDefNSSet)throwsException{

String name=elm.getName().toString();if(isSelfDefNSNode(name,selfDefNSSet)){

elm.detach();

}//get all sub elements of current elementListnodeset=(List)elm.evaluateXPath("*");for(MbElement childElm:nodeset){//recursiontraverseAndRemoveSelfDefNSNode(childElm,selfDefNSSet);

}

}

// 判读节点是否自定义名称空间的限定名privatebooleanisSelfDefNSNode(String name,SetselfDefNSSet){

String[] arr=name.split(":");if(arr.length==2){

String ns=arr[0];returnselfDefNSSet.contains(ns);

}else{returnfalse;

}

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值