SAX 解析 XML

SAX(simple API for XML)是一种XML解析的替代方法。相比于DOM,SAX是一种速度更快,更有效的方法。它逐行扫描文档,一边扫描一边解析。而且相比于DOM,SAX可以在解析文档的任意时刻停止解析,但任何事物都有其相反的一面,对于SAX来说就是操作复杂。

DOM解析
    原理:一次性加载XML文档,不适合大容量文件读取;
    DOM解析可以任意进行增删改查
    DOM解析任意读取任何位置的数据,甚至往回读
    DOM解析面向对象的编程方法(Node,Element,Attribute)Java开发者编译比较简单
SAX解析
    原理:加载一点,读取一点,处理一点。适合大容量文件读取
    SAX解析只能读取
    SAX解析只能从上往下,按顺序读取,不能往回读
    SAX解析基于事件的编译方法,Java开发编译相对复杂

 

1.导包 : dom4j-1.6.1.jar

2.简单的使用

public class AnesthesiaRecordParse{

   public String Parse(File file) {  
         String result = "";
	 SAXReader reader = new SAXReader();
	     try {
		    domcument = reader.read(file);
		    Element root = domcument.getRootElement();
                  
                        
                }catch{
                   }
       }

   }
}

public static void main(String[] args) {

String path = "E:\\yilei\\workspace-eclipse\\CDAService\\src\\xml\\emr\\EMR-SD-11-麻醉记录-T01.xml";
		File file = new File(path);
		AnesthesiaRecordParse arp = new AnesthesiaRecordParse();
		System.out.println(arp.Parse(file));
	}

}

 别人的总结:

Document document=new SAXReader.reader(“xml文路径/文件名xxx.xml”);//得到Document对象

Element root = document.getRootElement()//获得根节点

Iterator iterator=root.elementIterator(); //从根节点遍历子节点

Iterator iterator=Element.elementIterator(); //再从子节点在遍历其子节点

对节点访问其属性用:Attribute leaderAttr =Element. attribute(“xxx”);

对节点访问其某个属性leaderAttr的名称:leaderAttr.getName();
对节点访问其某个属性leaderAttr的值:leaderAttr.getValue()

对节点访问其名称:Element.getName();

对节点访问其文本:Element. getText();

自己的总结:

1.获得某个节点下的所有指定子节点  : father.elements("XXchild")
2.获得某个节点某个属性的值 : element.attributeValue("XXX")
3.获得该节点的值 : element.getText(); 或者 由父节点获取: father.elementTxetTrim("子节点名");




对应的例子:
1.List<Element> entryRelationships = procedure.elements("entryRelationship");
2.String displayName = entry.element("observation").element("code").attributeValue("displayName");
3.String measurement = value.getTextTrim();

XML文件:(1)

<procedure classCode="PROC" moodCode="EVN">
<!--麻醉方法代码-->
	<code code="1" displayName="全身麻醉" codeSystem="2.16.156.10011.2.3.1.159" codeSystemName="麻醉方法代码表"/>
<!--ASA分级标准代码 -->
	<entryRelationship typeCode="COMP">
	      <observation classCode="OBS" moodCode="EVN">
		<code code="DE05.10.129.00" codeSystem="2.16.156.10011.2.2.1" codeSystemName="卫生信息数据元目录" displayName="ASA分级标准代码"/>
		<value xsi:type="CD" code="1" displayName="I" codeSystem="2.16.156.10011.2.3.1.255" codeSystemName="美国麻醉医师协会(ASA)分级标准代码表"/>
	      </observation>
	</entryRelationship>
<!--气管插管分类 -->
	<entryRelationship typeCode="COMP">
		<observation classCode="OBS" moodCode="EVN">
		<code code="DE06.00.228.00" codeSystem="2.16.156.10011.2.2.1" codeSystemName="卫生信息数据元目录" displayName="气管插管分类"/>
		<value xsi:type="ST">标识全身麻醉时气管插管分类的描述</value>
		</observation>
	</entryRelationship>
</procedure>

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一彡十

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值