import Java.io.InputStream; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; import org.w3c.dom.NodeList; import com.fujitsu.cn.model.Patent; import com.fujitsu.cn.util.LogHelper; /** * 采用DOM解析xml文件 */ public class DOMDetailService { public static Patent getPatent(InputStream inStream) throws Exception { Patent patent = new Patent(); LogHelper.v("domservice"); DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); DocumentBuilder db = dbf.newDocumentBuilder(); Document document = db.parse(inStream); //通过getDocumentElement()方法获得该xml文件的根节点 Element root = document.getDocumentElement(); //获得以 details为标签对的所有节点对的列表<details></details> NodeList detailNodes = root.getElementsByTagName("details"); //由于本xml文件中只有一个这样的标签对,通过item(i)得到该元素,并且进行强制转化 Element patentElement = (Element) detailNodes.item(0); //获得该标签下面的所有标签的节点列表 NodeList childList = patentElement.getChildNodes(); //对获得到的节点列表进行遍历 getLength()可以得到NodeList列表的长度 for(int i=0; i<childList.getLength();i++){ //遍历所有的属性节点 nodelist.item(i)返回一个Node节点 Node patentAttribut = (Node)childList.item(i); //由于可能会出现空的节点,对该节点进行判断,判断该节点是不是该xml中的元素 //Node.ELEMENT_NODE的值为1,表示该节点是一个Element if(patentAttribut.getNodeType() == Node.ELEMENT_NODE){ //通过getNodeName()得到该Node的名字 //例如遍历到<type>3</type>,取值以后就是 type String tag = patentAttribut.getNodeName(); //getFirstChild()表示获得该节点下面的第一个孩子,getNodeValue()表示得到该孩子的值 //例如遍历到<type>3</type>通过该函数得到的值为3 String val = patentAttribut.getFirstChild().getNodeValue(); if("othercontents".equals(tag)){ patent.setOthercontents(val); }else if("publiccountry".equals(tag)){ patent.setCountry(val); }else if("type".equals(tag)){ patent.setType(val); } else if("title".equals(tag)){ patent.setTitle(val); } else if("IPC".equals(tag)){ patent.setIpc_number(val); } else if("status".equals(tag)){ patent.setStatus(val); } else if("pagenum".equals(tag)){ patent.setPagenum(val); } else if("submitid".equals(tag)){ patent.setSubmit_number(val); } else if("inventors".equals(tag)){ patent.setInventor(val); } else if("agent".equals(tag)){ patent.setAgent(val); } else if("claims".equals(tag)){ patent.setClaims(val); } else if("applicant".equals(tag)){ patent.setProposer(val); } } } inStream.close(); return patent; } }
JAVA语言利用DOM解析XML文件
内容版权声明:除非注明,否则皆为本站原创文章。