xml内容格式:
<?xml version=”1.0” encoding=”utf-8”?> <DATAAREA> <P_CHANGE_FLAG>职位信息变化标识0:未变化,1:变化</P_CHANGE_FLAG> <A_CHANGE_FLAG>环节信息变化标识 0:未变化,1:变化</A_CHANGE_FLAG> <FLOW_ID>流程内部ID(内部关联使用)</FLOW_ID> <FLOW_TITLE>流程名称</FLOW_TITLE> <POSITIONS> <POSITION> <POSITION_ID>职位唯一标识</POSITION_ID> <NAME>职位名称</NAME> <DUTY>职位职责</DUTY> <DEPARTMENT>办理科室</DEPARTMENT> <PERSON>办理人员及联系电话</PERSON> <PERSONGUIDS>32rft;3fg55gh;6h6u <PERSONGUIDS> <PERSONS> 张三;李四;王五<PERSONS> </POSITION> 。。。。。多个<POSITION> </POSITIONS> <FLOW_ACTIVITYS> <FLOW_ACTIVITY> <ACTIVITY_ID>环节ID(内部关联使用)</ACTIVITY_ID> <TYPE>环节类型(环节的类型:U-用户参与;D-系统过程处理)</TYPE> <TITLE>环节名称</TITLE> <POSITION_ID>职位标识</POSITION_ID> <HANDLE_TIMELIMIT>环节办理时限,填写数字</HANDLE_TIMELIMIT> <HANDLE_TIMELIMIT_TYPE>环节办理时限的单位,填写数字代码,内容为:1:工作日;2:月;3:年</HANDLE_TIMELIMIT_TYPE> <FILES> <FILE> <FILENAME>职位文书名称(完整文件名,带后缀) </FILENAME> <FILEKIND>发给行政相对人或内部存档</FILEKIND> <FILEURL>文书链接地址(公有云地址)</FILEURL> <FILECONTENT> </FILECONTENT> </FILE> 。。。多个<FILE> </FILES> </FLOW_ACTIVITY>
具体的解析代码如下:重点关注获取xml的节点部分的代码:
//infoXML 即为要解析的xml格式的 符串 Document document = DocumentHelper.parseText(infoXML); //获取A_CHANGE_FLAG标签节点的内容 String a_changeFlag = document.selectSingleNode("/DATAAREA/A_CHANGE_FLAG").getText(); // ---------------------------- 开始 解析xml数据 -------------------------- //获取POSITIONS节点 Node nodePositions = document.selectSingleNode("/DATAAREA/POSITIONS"); //取得POSITIONS节点下所有名为“POSITION”的子节点,并进行遍历. 遍历后每一个元素就是一组 POSITION 标签中的值 List listPosition = ((Element) nodePositions).elements("POSITION"); for (Iterator it = listPosition.iterator(); it.hasNext();) { //it.hasNext()判断是否有内容 Element elmPosition = (Element) it.next(); // // 节点 和 节点名字作参数获取节点值 String str = ResolveXMLDataUtil.getElementAsText( elmPosition, "POSITION_ID"); } /* * 三、 解析获取FLOW_ACTIVITYS节点 其中的FILE节点又有多个!!!! */ //获取FLOW_ACTIVITYS节点 Node nodeFlowActivitys = document.selectSingleNode("/DATAAREA/FLOW_ACTIVITYS"); //取得FLOW_ACTIVITYS节点下所有名为“FLOW_ACTIVITY”的子节点,并进行遍历. 遍历后每一个元素就是一组 FLOW_ACTIVITY 标签中的值 List<Element> listFlowActivity = ((Element) nodeFlowActivitys).elements("FLOW_ACTIVITY"); for (Iterator it = listFlowActivity.iterator(); it.hasNext();) { Element elmFlowActivity = (Element) it.next(); String title = ResolveXMLDataUtil.getElementAsText( elmFlowActivity, "TITLE"); //开始解析 <FILES>内容。 注意:这里都是用的Element相关api,node无相关api //获取FILES节点标签,返回的是集合,每一个元素就一个FILES List<Element> elements = elmFlowActivity.elements("FILES"); //FILES标签肯定只有一个,所以取出第一个值 Element elementFiles = elements.get(0); //elementFiles中存在多个FILE节点,获取他们 List<Element> listFile = elementFiles.elements("FILE"); for (Iterator itFILE = listFile.iterator(); itFILE.hasNext();) { Element elmFile = (Element) itFILE.next(); ResolveXMLDataUtil.getElementAsText( elmFile, "FILENAME"); } }