没有闭合(结束)标签XML文件的解析

先上XML文件:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<RESULT_INFO>
	<PATIENT>
		<origin value="XX科技公司" />
		<id value="1234568" />
		<name value="李四" />
		<sex value="男" />
		<age value="20" />
		<exmatime value="2018-01-26 18:26:37" />
	</PATIENT>
	<DATAINFO>
		<samplerate value="500" />
		<baseline value="32768" />
		<advalue value="262" />
		<channels value="9" />
		<channelbyte value="4" />
		<analysechannel value="6" />
	</DATAINFO>
	<EXAM_RESULT>
		<hr value="0" />
		<p_time value="0" />
		<pr_interval value="0" />
		<qrs_time value="0" />
		<qt_interval value="0" />
		<qtc_interval value="0" />
		<p_axis value="0.0" />
		<qrs_axis value="0.0" />
		<t_axis value="0.0" />
		<qrs_t value="0.0" />
		<sys_conclusion value="心率正常" />
		<minnsotCode value="157,152,136,139,158,139" />
	</EXAM_RESULT>
	<print_time value="2018-01-26 18:14:33" />
</RESULT_INFO>

该XML文件与平常所见XML有所不同,我们常见的XML文件是这样的:

<?xml version="1.0" encoding="utf-8"?>
<ROOT>
<VERSION>1.0</VERSION>
<USER>5</USER>
<TYPE>SPO2</TYPE>
<SOURCE>IOS</SOURCE>
<content>
<ITEM>
<SPO2>97</SPO2>
<PR>70</PR>
<PI>48</PI>
<TIME>2017-01-06 10:49:10</TIME>
</ITEM>
</content>
</ROOT>

那么非闭合标签的XML文件怎样读取,才能拿到子节点如minnsotCode 的属性值呢,刚开始我使用的是DOM解析,大致是这样,详细代码我就不贴出来了:

  DocumentBuilderFactory factory1 = DocumentBuilderFactory.newInstance();
  DocumentBuilder builder = factory1.newDocumentBuilder();
  Document doc = builder.parse(“demo.xml”);
  NodeList Item = doc.getElementsByTagName("EXAM_RESULT");
  for (int i = 0; i < Item.getLength(); i++) {
		String minnsotCode =doc.getElementsByTagName("minnsotCode ").item(i).getFirstChild().getNodeValue();
				
          }

运行后报空指针异常
后使用dom4J解析,终于拿到值。

import java.io.File;  
import java.util.Iterator;
import java.util.List;  
import org.dom4j.Attribute;  
import org.dom4j.Document;  
import org.dom4j.Element;  
import org.dom4j.Node;
import org.dom4j.io.SAXReader; 

public static void main(final String[] args) {  
	        final SAXParserHandler test = new SAXParserHandler();  
	        try {  
	             
	            ECG12 ecg12=test.GetECGData("E:\\test\\20170828.xml");
	            System.out.println(ecg12.getHeartRate());
		        System.out.println(ecg12.getECGResult());
		        System.out.println(ecg12.getMinnsotCode ());
	        } catch (final Exception e) {  
	            e.printStackTrace();  
	        }  
	    }  
	  
	     
	 public static ECG12 getECG12Test(final Element node)
	 {
	     	ECG12 ecg12=new ECG12();
	        getNodes(node,ecg12);
	        return ecg12;
	 }
	 
	    public ECG12 GetECGData(String path) throws Exception {  
	    	final SAXReader sax = new SAXReader();
	        final File xmlFile = new File(path);  //"E:\\test\\20170828.xml"
	        final Document document = sax.read(xmlFile);
	        final Element root = document.getRootElement();
	        ECG12 ecg12 = getECG12Test(root);
	        
	        return ecg12;
	      
	       
	    }  
	  
	    
	    public static void getNodes(final Element node,ECG12 ecg12) 
	    {  
	        
            final List<Attribute> listAttr = node.attributes();
	        
	        for (final Attribute attr : listAttr) 
	        {
	        	if(node.getName().equalsIgnoreCase("hr"))
	        	{
	        		 ecg12.setHeartRate(Integer.parseInt(attr.getValue()));
	        		
	        	} if(node.getName().equalsIgnoreCase("sys_conclusion"))
	        	{
	        		String ecgResult=attr.getValue();
	        		ecg12.setECGResult(ecgResult);
	        	
	        	}else if(node.getName().equalsIgnoreCase("minnsotcode"))
	        	{
	        		String minnsotcode=attr.getValue();
	        		ecg12.setECGData(minnsotcode);
	        	}
	         
	        }  
	        final List<Element> listElement = node.elements(); 
	        for (final Element e : listElement)
	        {           
	            getNodes(e,ecg12);
	        }
		
	    }  


 ```以上ECG12为要取值的实体类,最终目的拿到各个属性值赋值,然后在存进数据库,本人才疏学浅,如有不足之处,欢迎指正,同时如果有更好的解决办法,也欢迎提出。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值