當柳上原的風吹向天際的時候...

          真正的快樂來源于創造

            BlogJava :: 首頁 :: 聯系 :: 聚合  :: 管理
            368 Posts :: 1 Stories :: 201 Comments :: 0 Trackbacks

          公告


          常用鏈接

          留言簿(3)

          最新隨筆

          積分與排名

          • 積分 - 394695
          • 排名 - 145

          最新評論

          閱讀排行榜

          代碼:
          import java.util.HashSet;
          import java.util.List;
          import java.util.Set;
          import java.util.regex.Pattern;

          import com.ibm.broker.javacompute.MbJavaComputeNode;
          import com.ibm.broker.plugin.MbElement;
          import com.ibm.broker.plugin.MbException;
          import com.ibm.broker.plugin.MbMessage;
          import com.ibm.broker.plugin.MbMessageAssembly;
          import com.ibm.broker.plugin.MbOutputTerminal;


          public class subflow_JavaCompute extends MbJavaComputeNode {

              
          public void evaluate(MbMessageAssembly inAssembly) throws MbException {
                  MbOutputTerminal out 
          = getOutputTerminal("out");
                  MbOutputTerminal alt 
          = getOutputTerminal("alternate");

                  MbMessage inMessage 
          = inAssembly.getMessage();
                  MbMessage outMessage 
          = new MbMessage(inMessage);
                  MbMessageAssembly outAssembly
          =new MbMessageAssembly(inAssembly,outMessage);
                  
                  MbElement document
          =outMessage.getRootElement();
                  MbElement root
          =document.getLastChild().getFirstChild();

                  
          try{
                      Set
          <String> selfDefNSSet=new HashSet<String>();// 用來存儲自定義的名稱空間名
                      traverseAndRemoveNils(root,selfDefNSSet);// 遍歷節點刪除特定屬性
                      
                      
          if(selfDefNSSet.size()>0){
                          traverseAndRemoveSelfDefNSNode(root,selfDefNSSet);// 遍歷節點刪除自定義名稱空間節點
                      }
                  }
                  
          catch(Exception ex){
                      ex.printStackTrace();
                  }
                  
                  out.propagate(outAssembly);
              }

              
              
          private void traverseAndRemoveNils(MbElement elm,Set<String> selfDefNSSet) throws Exception{
                  
          // get all the attributes of current element
                  List <MbElement> attrSet = (List <MbElement>)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 element
                  List <MbElement> nodeset = (List <MbElement>)elm.evaluateXPath("*"); 
                  
          for(MbElement childElm:nodeset){
                      
          // recursion
                      traverseAndRemoveNils(childElm,selfDefNSSet);
                  }
              }
              
              // 判斷是否特定屬性,a:nil,b:nil都算
              
          private boolean isNillAttr(String name,String value){
                  String patternStr
          ="(\\w+)(:nil)";
                    
                  
          boolean result1 = Pattern.matches(patternStr, name);
                  
          boolean result2="true".equals(value);
                  
                  
          return result1&&result2;
              }
              // 判斷是否自定義名稱空間
              
          private boolean isSelfDefNS(String name,String value){
                  String patternStr
          ="(xmlns:)(\\w+)";
                    
                  
          boolean result = Pattern.matches(patternStr, name);
                  
                  
          return result;
              }
             
              
          private void traverseAndRemoveSelfDefNSNode(MbElement elm,Set<String> selfDefNSSet) throws Exception{
                  String name
          =elm.getName().toString();
                  
                  
          if(isSelfDefNSNode(name,selfDefNSSet)){
                      elm.detach();
                  }
                  
                  
          // get all sub elements of current element
                  List <MbElement> nodeset = (List <MbElement>)elm.evaluateXPath("*"); 
                  
          for(MbElement childElm:nodeset){
                      
          // recursion
                      traverseAndRemoveSelfDefNSNode(childElm,selfDefNSSet);
                  }
              }
              // 判讀節點是否自定義名稱空間的限定名
              
          private boolean isSelfDefNSNode(String name,Set<String> selfDefNSSet){
                  String[] arr
          =name.split(":");
                  
                  
          if(arr.length==2){
                      String ns
          =arr[0];
                      
                      
          return selfDefNSSet.contains(ns);
                  }
          else{
                      
          return false;
                  }
              }
          }

          輸入:
          <contactInfo xmlns:ns1="http://tbccorp.com/Services/CustomerMgt/v1/"><homePhoneNumber as:b="c"><key xsi:nil="true"/><value></value></homePhoneNumber><workPhoneNumber><ns1:a>1644</ns1:a><key xsi:nil="true"/><value ns1:nil="true">5</value></workPhoneNumber><ns1:b>1949</ns1:b><mobilePhoneNumber xmlns:ns1="http://tbccorp.com/Services/CustomerMgt/v1/"><key xsi:nil="true"/><value>3159867097</value></mobilePhoneNumber></contactInfo>

          輸出:
          <contactInfo><homePhoneNumber as:b="c"><key/><value/></homePhoneNumber><workPhoneNumber><key/><value>5</value></workPhoneNumber><mobilePhoneNumber><key/><value>3159867097</value></mobilePhoneNumber></contactInfo>
          posted on 2011-12-09 23:40 何楊 閱讀(1585) 評論(0)  編輯  收藏 所屬分類: WMB
          主站蜘蛛池模板: 田东县| 阿巴嘎旗| 宁强县| 上虞市| 利津县| 峨边| 遂溪县| 五常市| 文山县| 临猗县| 安吉县| 新邵县| 富宁县| 屏边| 道真| 凤庆县| 溆浦县| 深圳市| 宜黄县| 嘉善县| 黑山县| 南涧| 开平市| 尉氏县| 黔东| 碌曲县| 什邡市| 尚志市| 盐津县| 胶州市| 唐山市| 余江县| 安国市| 炎陵县| 托克逊县| 宿松县| 红原县| 新竹市| 吉林市| 绍兴县| 厦门市|