dom paser
/** * */ package ec.utils; import java.io.BufferedInputStream; import java.io.ByteArrayInputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStreamWriter; import java.io.Writer; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.regex.Matcher; import java.util.regex.Pattern; import ec.application.ECSigleton; import ec.domain.common.conversion.ConvType.Namespace; import ec.export.XMLHelper; import ec.product.ECItem; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; import javax.xml.transform.OutputKeys; import javax.xml.transform.Result; import javax.xml.transform.Source; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerConfigurationException; import javax.xml.transform.TransformerException; import javax.xml.transform.TransformerFactory; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; import org.w3c.dom.NodeList; import org.xml.sax.SAXException; /** * @author yangff * */ public class ShowDBMwithRT { public static ShowDBMwithRT instance; public ShowDBMwithRT getInstance() { if(instance==null) { instance=new ShowDBMwithRT(); } return instance; } //add "DBM" before "RT" public String addDBMbeforeRT(String passstr) { //Air Handler-RT 18 MF</model> String strdbm=passstr;//RoofTop-RT 18 MF String strfront=""; String strafter=""; strfront=strdbm.substring(0, strdbm.indexOf("-")); //Air Handler- strafter="-DBM "+strdbm.substring(strdbm.indexOf("-")+1); strdbm=strfront+strafter; return strdbm; } /* <field> <name>Model #</name> <value>RT 18 MF</value> <type>Dotted</type> </field> <model>Air Handler-RT 18 MF</model> <field> <name>Air handler model</name> <value>RT 18 MF</value> <type>Dotted</type> </field> <description>RT 18 MF</description> */ //process xml for preprint public Document processXmlforprint(String passxmlstr) { Document xmlDoc=null; try { ByteArrayInputStream bis = new ByteArrayInputStream(passxmlstr.getBytes("UTF-8")); xmlDoc = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(bis); } catch (Throwable e) { try { throw new Exception("MSG_COULDN'T_PARSE_XML", e); } catch (Exception e1) { // TODO Auto-generated catch block e1.printStackTrace(); } } NodeList nlds=xmlDoc.getElementsByTagName("description"); showElem(nlds); nlds=xmlDoc.getElementsByTagName("value"); showElem(nlds); nlds=xmlDoc.getElementsByTagName("model"); showElem(nlds); return xmlDoc; } public static void showElem(NodeList nl){ for(int i=0;i<nl.getLength();i++){ Node n=nl.item(i); if(n.hasChildNodes()){ // System.out.print("<"+n.getNodeName()+">"); //递归 showElem(n.getChildNodes()); // System.out.print("</"+n.getNodeName()+">"); }else{ //判断是不是文本 if(n.getNodeType()==Node.TEXT_NODE){ if(n.getNodeValue().indexOf("RT")!=-1) { if(n.getNodeValue().startsWith("Air Handler-RT")) { //<model>Air Handler-RT 18 MF</model> String strmodel=n.getNodeValue(); String strfront=""; String strafter=""; strfront=strmodel.substring(0, strmodel.indexOf("-")); //Air Handler- strafter="-DBM "+strmodel.substring(strmodel.indexOf("-")+1); strmodel=strfront+strafter; n.setNodeValue(strmodel); } else { n.setNodeValue("DBM "+n.getNodeValue()); } break; } //System.out.print(n.getNodeValue()); }else{ // System.out.print("<"+n.getNodeName()+">"); //System.out.print("</"+n.getNodeName()+">"); } break; } } } /* <field> <name>Compressors (Qty)</name> <value>5SH240_4(4)</value> <type>Dotted</type> </field> */ //ACDS COMPRESS CHANGE public Document processXmlforprintBeta(String passxmlstr) { Document xmlDoc=null; try { ByteArrayInputStream bis = new ByteArrayInputStream(passxmlstr.getBytes("UTF-8")); xmlDoc = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(bis); } catch (Throwable e) { try { throw new Exception("MSG_COULDN'T_PARSE_XML", e); } catch (Exception e1) { // TODO Auto-generated catch block e1.printStackTrace(); } } NodeList nlds=xmlDoc.getElementsByTagName("value"); showElem_ACDS(nlds); return xmlDoc; } public void showElem_ACDS(NodeList nl){ for(int i=0;i<nl.getLength();i++){ Node n=nl.item(i); if(n.hasChildNodes()){ // System.out.print("<"+n.getNodeName()+">"); //递归 showElem_ACDS(n.getChildNodes()); // System.out.print("</"+n.getNodeName()+">"); }else{ //判断是不是文本 if(n.getNodeType()==Node.TEXT_NODE){ if((n.getNodeValue().indexOf("SH")!=-1 || n.getNodeValue().indexOf("HLJ")!=-1)&& n.getNodeValue().contains("_") && n.getNodeValue().contains("(") && n.getNodeValue().contains(")")){ String strmodel=n.getNodeValue(); if(strmodel.contains("5SH")) { strmodel=strmodel.replaceAll("5SH", "SH"); } if(strmodel.contains("SH300")) { strmodel=strmodel.replaceAll("SH300", "SH295"); } if(strmodel.contains("/")){ String a=strmodel.substring(0,strmodel.indexOf("_")); String b=strmodel.substring(strmodel.indexOf("("),strmodel.indexOf("/")); String c=strmodel.substring(strmodel.indexOf("/"),strmodel.lastIndexOf("_")); String d=strmodel.substring(strmodel.lastIndexOf("("),strmodel.lastIndexOf(")")+1); strmodel= a+b+c+d; }else{ String a=strmodel.substring(0,strmodel.indexOf("_")); String b=strmodel.substring(strmodel.indexOf("(")); strmodel= a+b; } n.setNodeValue(strmodel); break; } //System.out.print(n.getNodeValue()); }else{ // System.out.print("<"+n.getNodeName()+">"); //System.out.print("</"+n.getNodeName()+">"); } break; } } } // FOR AVX public Document processXmlforprintAVX(String passxmlstr) { Document xmlDoc=null; try { ByteArrayInputStream bis = new ByteArrayInputStream(passxmlstr.getBytes("UTF-8")); xmlDoc = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(bis); } catch (Throwable e) { try { throw new Exception("MSG_COULDN'T_PARSE_XML", e); } catch (Exception e1) { // TODO Auto-generated catch block e1.printStackTrace(); } } NodeList nlds=xmlDoc.getElementsByTagName("value"); showElem_AVX(nlds); return xmlDoc; } public void showElem_AVX(NodeList nl){ for(int i=0;i<nl.getLength();i++){ Node n=nl.item(i); if(n.hasChildNodes()){ // System.out.print("<"+n.getNodeName()+">"); //递归 showElem_AVX(n.getChildNodes()); // System.out.print("</"+n.getNodeName()+">"); }else{ //判断是不是文本 if(n.getNodeType()==Node.TEXT_NODE){ String strmodel=n.getNodeValue(); //System.out.println("********"+strmodel); if(strmodel.contains("cm")) { strmodel=strmodel.replaceAll("cm", "MSC"); n.setNodeValue(strmodel); break; } }else{ // System.out.print("<"+n.getNodeName()+">"); //System.out.print("</"+n.getNodeName()+">"); } break; } } } public static Namespace getNamespaceFromMap(String name) { Namespace name_str= null; Iterator<String> it=ECItem.mFamate.keySet().iterator(); while(it.hasNext()) { String tmp= it.next().toString(); if(tmp.toUpperCase().indexOf(name.toUpperCase())!=-1) { name_str=(Namespace) ECItem.mFamate.get(tmp); break; } } return name_str; } //==========================================xml=======common method [1]===================================== /** * common method "getfromXml " get target from Xml * * @param args example: * * { * <version>SPEC ver. 7.0, 26469</version> * String discription:version * String strfind :"SPEC ver" * return "SPEC ver. 7.0, 26469" * } * */ static String targetstr=""; public static String getfromXml(String passxmlstr,String discription,String strfind) { String result=""; Document xmlDoc=null; try { ByteArrayInputStream bis = new ByteArrayInputStream(passxmlstr.getBytes("UTF-8")); xmlDoc = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(bis); } catch (Throwable e) { try { throw new Exception("MSG_COULDN'T_PARSE_XML", e); } catch (Exception e1) { // TODO Auto-generated catch block e1.printStackTrace(); } } NodeList nlds=xmlDoc.getElementsByTagName(discription); result=showElem_target(nlds,strfind); return result; } public static String showElem_target(NodeList nl,String strfind){ boolean flag=false; for(int i=0;i<nl.getLength();i++){ Node n=nl.item(i); if(n.hasChildNodes()&&!flag){ // System.out.print("<"+n.getNodeName()+">"); showElem_target(n.getChildNodes(),strfind); // System.out.print("</"+n.getNodeName()+">"); }else{ if(n.getNodeType()==Node.TEXT_NODE){ //System.out.print(n.getNodeValue()); if(n.getNodeValue().indexOf(strfind)!=-1){ targetstr=n.getNodeValue(); flag=true; break; } }else{ // System.out.print("<"+n.getNodeName()+">"); //System.out.print("</"+n.getNodeName()+">"); } break; } } return targetstr; } //==========================================xml=======common method [1]===================================== //==========================================xml=======common method [2]===================================== /** * common method "findbynode" get target from Xml 2 * * @param args example: * * { * <field> //field-->bignode * <name>Motor hand</name> //name-->clum1 , "Motor hand"-->itemvalue * <value>Right</value> //value-->clum2 * <type>Dotted</type> * </field> * } * */ public static ArrayList findbynode(String passxmlstr,String bignode,String clum1,String itemvalue,String clum2) { ArrayList<String> result=new ArrayList<String>(); /* bignode="field"; clum1="name"; clum2="value"; */ ArrayList<Map> al=paserxmlbynode(passxmlstr,bignode); for(Map m : al) { if(m.containsKey(clum1)&&m.get(clum1).toString().equals(itemvalue)) { result.add(m.get(clum2).toString()); //break; } } //System.out.println(result); return result; } public static ArrayList paserxmlbynode(String passxmlstr,String bignode) { Document xmlDoc=null; try { ByteArrayInputStream bis = new ByteArrayInputStream(passxmlstr.getBytes("UTF-8")); xmlDoc = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(bis); } catch (Throwable e) { try { throw new Exception("MSG_COULDN'T_PARSE_XML", e); } catch (Exception e1) { // TODO Auto-generated catch block e1.printStackTrace(); } } // System.out.print(passxmlstr); ArrayList<Map> listitem=new ArrayList<Map>(); // find bignode NodeList nlds=xmlDoc.getElementsByTagName(bignode); int size =nlds.getLength(); for(int j=0;j<size;j++) { Node nd=nlds.item(j).getFirstChild().getNextSibling(); Map<String,String> map=new HashMap<String,String>(); while(nd!=null) { map.put(nd.getNodeName(), nd.getFirstChild().getNodeValue()); nd= nd.getNextSibling().getNextSibling(); } listitem.add(map); } // System.out.print(listitem.size()); return listitem; } public static ArrayList findbynode(Document xmlDoc,String bignode,String clum1,String itemvalue,String clum2) { ArrayList<String> result=new ArrayList<String>(); /* bignode="field"; clum1="name"; clum2="value"; */ ArrayList<Map> al=paserxmlbynode(xmlDoc,bignode); for(Map m : al) { if(m.containsKey(clum1)&&m.get(clum1).toString().equals(itemvalue)) { result.add(m.get(clum2).toString()); //break; } } //System.out.println(result); return result; } public static ArrayList paserxmlbynode(Document xmlDoc,String bignode) { // System.out.print(passxmlstr); ArrayList<Map> listitem=new ArrayList<Map>(); // find bignode NodeList nlds=xmlDoc.getElementsByTagName(bignode); int size =nlds.getLength(); for(int j=0;j<size;j++) { Node nd=nlds.item(j).getFirstChild().getNextSibling(); Map<String,String> map=new HashMap<String,String>(); while(nd!=null) { map.put(nd.getNodeName(), nd.getFirstChild().getNodeValue()); nd= nd.getNextSibling().getNextSibling(); } listitem.add(map); } // System.out.print(listitem.size()); return listitem; } //=========================================common method============================================= /* * return description content "1 Access panel(s) standard" <price description="1 Access panel(s) standard" list="0.0" markupType="0" metric="uEnglish" net="0.0" shipLoose="false" /> */ public static List<String> testfindnodebyattr(String passxmlstr,String node,String strAttr) { /* String path="D:\Task\filter-init\filter.xml"; BufferedReader bufReader=null; String passxmlstr=""; String temps=""; try { bufReader = new BufferedReader(new FileReader(path)); while((temps=bufReader.readLine())!=null){ passxmlstr+=temps; } } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } finally{ try { bufReader.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } */ String result=""; Document xmlDoc=null; try { ByteArrayInputStream bis = new ByteArrayInputStream(passxmlstr.getBytes("UTF-8")); xmlDoc = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(bis); } catch (Throwable e) { try { throw new Exception("MSG_COULDN'T_PARSE_XML", e); } catch (Exception e1) { // TODO Auto-generated catch block e1.printStackTrace(); } } NodeList nlds=xmlDoc.getElementsByTagName(node); return showAttr_target(nlds,strAttr); } //=========================================common method============================================= public static List showAttr_target(NodeList nl,String strAttr) { List l=new ArrayList(); String targetstr=""; for(int i=0;i<nl.getLength();i++) { Node n=nl.item(i); targetstr=n.getAttributes().getNamedItem(strAttr).toString(); l.add(targetstr); } return l; } // =========================================common method============================================= public static String changeCompName(String compName){ String NewCompName=""; //cm1230NHL6X7K(2) //String tests="cm1230NHL6X7K(2)"; //compName=tests; boolean twice=false; if(compName.indexOf("(")>=0) twice=true; Pattern p=Pattern.compile("([a-z]+)(\d+)"); Matcher m=p.matcher(compName); while(m.find()) { NewCompName=m.group(); } if(twice){ Pattern p2=Pattern.compile("(?<=\()[^\)]+"); Matcher m2=p2.matcher(compName); while(m2.find()) { NewCompName+="("+m2.group()+")"; } } if(NewCompName.indexOf("cm")>=0) { NewCompName=NewCompName.replaceAll("cm", "MSC"); } //System.out.println(NewCompName); return NewCompName; } public static void main(String[] args) { ShowDBMwithRT sdrt=new ShowDBMwithRT(); //sdrt.getInstance().processXmlforprint(""); sdrt.getInstance().changeCompName(""); } }