xml 如下:

<?xml version="1.0" encoding="UTF-8"?>
<POOR_IN200901UV ITSVersion="XML_1.0" xmlns="urn:hl7-org:v3"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="urn:hl7-org:v3 ../../Schemas/POOR_IN200901UV20.xsd">
<id extension="BS002" />
<creationTime value="20120106110000" />
<interactionId root="2.16.840.1.113883.1.6" extension="POOR_IN200901UV20" />
<processingCode code="P" />
<!-- 消息处理模式: A(Archive); I(Initial load); R(Restore from archive); T(Current
processing) -->
<processingModeCode code="T" />
<!-- 消息应答: AL(Always); ER(Error/reject only); NE(Never) -->
<acceptAckCode code="NE" /> <!-- 接受者 -->
<receiver typeCode="RCV">
<device classCode="DEV" determinerCode="INSTANCE">
<!-- 接受者ID -->
<id>
<item root="1.2.156.456150488.1.1.19" extension=""/>
</id>
</device>
</receiver>
<!-- 发送者 -->
<sender typeCode="SND">
<device classCode="DEV" determinerCode="INSTANCE">
<!-- 发送者ID -->
<id>
<item root="1.2.156.456150488.1.1.19" extension="S002"/>
</id>
</device>
</sender>
<controlActProcess classCode="CACT" moodCode="EVN">
<!-- 消息交互类型 @code: 新增 :new 删除:delete 补发:replace-->
<code code="new"></code>
<subject typeCode="SUBJ" xsi:nil="false">
<placerGroup classCode="GROUPER" moodCode="RQO">
<subject typeCode="SBJ">
<patient classCode="PAT">
<id>
<!-- 域ID -->
<item root="1.2.156.456150488.1.2.1.2" extension="01" />
<!-- 患者ID -->
<item root="1.2.156.456150488.1.2.1.3" extension="09102312" />
<!-- 就诊号 -->
<item root="1.2.156.456150488.1.2.1.12" extension="0910238" />
</id>
<!-- 病区编码/病区名 床号 -->
<addr xsi:type="BAG_AD">
<item use="TMP">
<part type="BNR" value="9A血液科" code="09808" codeSystem="1.2.156.456150488.1.1.33"/>
<part type="CAR" value="06" />
</item>
</addr>
</patient>
</subject>
</controlActProcess>
</POOR_IN200901UV>

三种取值方法,命名空间:xmlns="urn:hl7-org:v3"

/**
* 推荐使用
* @throws Exception
*/
@Test
void hl7V3Parse1() throws Exception { String xmlPath = "D:\\BS002.xml";
File xmlFile = new File(xmlPath);
SAXReader reader = new SAXReader();
Document doc = reader.read(xmlFile); //添加命名空间
Map<String, String> xmlMap = new HashMap<>();
xmlMap.put("s", "urn:hl7-org:v3"); //作用域在文档上,方便多次 select Node
reader.getDocumentFactory().setXPathNamespaceURIs(xmlMap); Node interactionId = doc.selectSingleNode("s:POOR_IN200901UV/s:creationTime/@value");
System.out.println(interactionId.getText()); //当有多个item 时,指定 root = 1.2.156.456150488.1.2.1.3 的 extension 值
Node patientLidNode = doc.selectSingleNode("/s:POOR_IN200901UV/s:controlActProcess/s:subject/s:placerGroup/s:subject/s:patient/s:id/s:item[@root='1.2.156.456150488.1.2.1.3']/@extension");
System.out.println(patientLidNode.getText());
} /**
* 不太方便
* @throws Exception
*/
@Test
void hl7V3Parse2() throws Exception { String xmlPath = "D:\\BS002.xml";
File xmlFile = new File(xmlPath);
SAXReader reader = new SAXReader();
Document doc = reader.read(xmlFile); //添加命名空间
Map<String, String> xmlMap = new HashMap<>();
xmlMap.put("s", "urn:hl7-org:v3");
//作用域在 XPath 上
XPath xPath = doc.createXPath("s:POOR_IN200901UV/s:creationTime/@value");
xPath.setNamespaceURIs(xmlMap);
Node name = xPath.selectSingleNode(doc);
System.out.println(name.getText());
} /**
* HL7 节点太多,这种方法相当麻烦
* @throws Exception
*/
@Test
void hl7V3Parse3() throws Exception {
String xmlPath = "D:\\BS002.xml";
File xmlFile = new File(xmlPath);
SAXReader reader = new SAXReader();
Document doc = reader.read(xmlFile); Attribute name = doc.getRootElement().element("creationTime").attribute("value");
System.out.println(name.getValue());
}

赋值,保存 HL7 XML

void hl7ParseBS004() throws Exception {
String xmlPath = "D:\\BS004.xml";
String savePath = "D:\\BS004_save.xml";
File xmlFile = new File(xmlPath);
SAXReader reader = new SAXReader();
Document doc = reader.read(xmlFile); //添加命名空间
Map<String, String> xmlMap = new HashMap<>();
xmlMap.put("s", "urn:hl7-org:v3"); //作用域在文档上,方便多次 select Node
reader.getDocumentFactory().setXPathNamespaceURIs(xmlMap); //消息创建时间
Node creationTimeNode = doc.selectSingleNode("/s:POOR_IN200901UV/s:creationTime/@value");
creationTimeNode.setText(DateUtil.format(new Date(), "yyyyMMddHHmmss"));
OutputFormat outputFormat = OutputFormat.createPrettyPrint();
outputFormat.setEncoding("UTF-8");
XMLWriter writer = null;
try {
writer = new XMLWriter(new FileWriter(savePath), outputFormat);
writer.write(doc);
writer.flush();
writer.close();
} catch (Exception e) {
e.printStackTrace();
}
}

dom4j selectNodes 取不到值 因为XML带有命名空间 HL7的更多相关文章

  1. @Value取不到值引出的spring的2种配置文件applicationContext.xml和xxx-servlet.xml

    项目中经常会用到配置文件,定义成properties的形式比较常见,为了方便使用一般在spring配置文件中做如下配置: <context:property-placeholder ignore ...

  2. org.apache.commons.lang3.tuple.Pair 作为更新参数,XML 中的 Sql 取不到值、报错

    项目用的 Mybatis,今天改一个需求,落地实现是批量更新,且只需要根据主键(id)来更新一个字段(name). 于是,没有犹豫,像下面这样设计了数据结构: 既然是批量更新,那外层肯定是 List ...

  3. spring注解@Value取不到值【转】

    spring注解@Value取不到值 今天在一个项目中发现一个情况,在Service中取不到name值,直接输出了{name}字符串,找了好久,最后在一篇文章中找到解决方案. 解决这个问题的一篇文章( ...

  4. 数据库TINYINT类型 参数0 mybatis取不到值

    tinyint存储0的奇怪问题  数据库TINYINT类型   参数0  mybatis取不到值 postman 传参 audited   =0          audited   =1  两种情况 ...

  5. 控制层@Value注解取不到值

    @Value("${enable-upload-image}") private String enable; 如上所示,同样的代码,写在在业务层,运行时能取到正确的值,但在控制层 ...

  6. [转载]ASP.NET中TextBox控件设立ReadOnly="true"后台取不到值

    原文地址:http://www.cnblogs.com/yxyht/archive/2013/03/02/2939883.html ASP.NET中TextBox控件设置ReadOnly=" ...

  7. IE10中session失效取不到值的问题

    在eworkflow工作流,ebiao报表,eform自定义表单产品升级到IE10的时候,系统登录后,总是会取不到session中的值. for j2ee版本和for dotnet版本都一样取不到值. ...

  8. struts2下s:iterator取不出值

    1:问题起因:通过action方法连接数据库取出Arraylist集合,在前台页面遍历显示无数据,用s:debug查看 stack里有值,用了各种方法,包括session传值,但是仍然取不出来. 2: ...

  9. [转]用Linq取CheckBoxList選取項目的值

    本文转自:http://www.dotblogs.com.tw/hatelove/archive/2011/11/17/linq-checkboxlist-items-selected-values. ...

  10. Selenium2学习-028-WebUI自动化实战实例-026-获取页面元素值或者元素属性值

    在自动化脚本编写过程中,经常需要获取页面元素的文本进行判断,以便对于不同的文本进行不同的处理.比如:很多的购物网站,加入购物车的按钮是有多个状态的(加入购物车.到货通知.暂不销售等),那么在实际的操作 ...

随机推荐

  1. x86平台SIMD编程入门(1):SIMD基础知识

    1.简介 SIMD(Single Instruction, Multiple Data)是一种并行计算技术,它通过向量寄存器存储多个数据元素,并使用单条指令同时对这些数据元素进行处理,从而提高了计算效 ...

  2. tcpdump必知必会

    tcpdump原理 & 在tcp协议栈的位置 tcpdump用法 基于协议.主机.端口过滤 使用and or逻辑运算符做复杂的过滤操作 tcpdump flags 1. tcpdump原理 l ...

  3. testre

    f5看到关键代码判断 猜测这是flag或者是加密后的结果,直接将其当作flag答案不对,所以猜测为加密后的结果,然后再通过其他函数了解 跟进第一个函数发现编码表 本来想试试base解密,可是当时只试了 ...

  4. Element类型&Text类型&Comment类型

    Element节点类型  nodetype=1 nodename=大写元素标签名  父节点可以说document 或element 其子节点可以是Element .Text .comment 访问元素 ...

  5. Markdown & typora 速查

    Markdown & typora 速查 一级标题 # 一级标题 说明:#数量表示几级标题,如二级标题为"## 二级标题",支持到6级标题,#和标题中间有一个空格 typo ...

  6. Tech Lead 要学会戴着镣铐跳舞

    这不是一篇讨喜的文章,至少不会是你常常看到的例如<成为优秀 Tech Lead 的六个建议>令人欢欣鼓舞的那一类.今天我们聊聊 Tech Lead 所面临的不那么轻松的现实问题 程序员一定 ...

  7. Golang中如何自定义时间类型进行xml、json的序列化/反序列化

    在日常开发工作中,我们进行会遇到将 struct 序列化 json字符串以及将 json字符串 反序列化为 struct 的场景,大家也对此十分熟悉. 最近工作中,遇到了需要将 struct 序列化 ...

  8. 【WCH以太网接口系列芯片】基于CH395的组播应用

    ---------------------------------------------------------------------------------------------------- ...

  9. idea常用快捷键使用

    idea常用快捷键使用:1.shift+u 大小写2.alt+shift+u 驼峰命名(插件:CamelCase)3.ctrl+alt 点击跳转实现类4.ctrl 点击跳转接口类5.Alt+F7 查看 ...

  10. echarts设置多条折线不是你想的那样简单

    简单的多条折线图 小伙伴写过多条折线图的都知道, 常见的折线图是 xAxis 配置项下的 data属性上设置时间或者日期. series配置项下是对应的 legend中的数据以及该条折线的数据. &l ...