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

          真正的快樂來源于創造

            BlogJava :: 首頁 :: 聯系 :: 聚合  :: 管理
            368 Posts :: 1 Stories :: 201 Comments :: 0 Trackbacks
          代碼:
          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
          主站蜘蛛池模板: 繁峙县| 若羌县| 呼和浩特市| 弥勒县| 遵义县| 东兰县| 高平市| 邵阳市| 威信县| 陵水| 阿勒泰市| 溧阳市| 芜湖县| 鄂州市| 金川县| 天柱县| 博白县| 德清县| 新民市| 吉木萨尔县| 威信县| 昆山市| 台东县| 盐亭县| 永兴县| 通化市| 镇原县| 乐昌市| 游戏| 阳东县| 文水县| 澄迈县| 迭部县| 绥棱县| 泌阳县| 丹凤县| 渭源县| 玉溪市| 师宗县| 潼关县| 曲松县|