xml 如下:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <POOR_IN200901UV ITSVersion="XML_1.0" xmlns="urn:hl7-org:v3"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="urn:hl7-org:v3 ../../Schemas/POOR_IN200901UV20.xsd">
  5. <id extension="BS002" />
  6. <creationTime value="20120106110000" />
  7. <interactionId root="2.16.840.1.113883.1.6" extension="POOR_IN200901UV20" />
  8. <processingCode code="P" />
  9. <!-- 消息处理模式: A(Archive); I(Initial load); R(Restore from archive); T(Current
  10. processing) -->
  11. <processingModeCode code="T" />
  12. <!-- 消息应答: AL(Always); ER(Error/reject only); NE(Never) -->
  13. <acceptAckCode code="NE" />
  14.  
  15. <!-- 接受者 -->
  16. <receiver typeCode="RCV">
  17. <device classCode="DEV" determinerCode="INSTANCE">
  18. <!-- 接受者ID -->
  19. <id>
  20. <item root="1.2.156.456150488.1.1.19" extension=""/>
  21. </id>
  22. </device>
  23. </receiver>
  24. <!-- 发送者 -->
  25. <sender typeCode="SND">
  26. <device classCode="DEV" determinerCode="INSTANCE">
  27. <!-- 发送者ID -->
  28. <id>
  29. <item root="1.2.156.456150488.1.1.19" extension="S002"/>
  30. </id>
  31. </device>
  32. </sender>
  33. <controlActProcess classCode="CACT" moodCode="EVN">
  34. <!-- 消息交互类型 @code: 新增 :new 删除:delete 补发:replace-->
  35. <code code="new"></code>
  36. <subject typeCode="SUBJ" xsi:nil="false">
  37. <placerGroup classCode="GROUPER" moodCode="RQO">
  38. <subject typeCode="SBJ">
  39. <patient classCode="PAT">
  40. <id>
  41. <!-- 域ID -->
  42. <item root="1.2.156.456150488.1.2.1.2" extension="01" />
  43. <!-- 患者ID -->
  44. <item root="1.2.156.456150488.1.2.1.3" extension="09102312" />
  45. <!-- 就诊号 -->
  46. <item root="1.2.156.456150488.1.2.1.12" extension="0910238" />
  47. </id>
  48. <!-- 病区编码/病区名 床号 -->
  49. <addr xsi:type="BAG_AD">
  50. <item use="TMP">
  51. <part type="BNR" value="9A血液科" code="09808" codeSystem="1.2.156.456150488.1.1.33"/>
  52. <part type="CAR" value="06" />
  53. </item>
  54. </addr>
  55. </patient>
  56. </subject>
  57. </controlActProcess>
  58. </POOR_IN200901UV>

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

  1. /**
  2. * 推荐使用
  3. * @throws Exception
  4. */
  5. @Test
  6. void hl7V3Parse1() throws Exception {
  7.  
  8. String xmlPath = "D:\\BS002.xml";
  9. File xmlFile = new File(xmlPath);
  10. SAXReader reader = new SAXReader();
  11. Document doc = reader.read(xmlFile);
  12.  
  13. //添加命名空间
  14. Map<String, String> xmlMap = new HashMap<>();
  15. xmlMap.put("s", "urn:hl7-org:v3");
  16.  
  17. //作用域在文档上,方便多次 select Node
  18. reader.getDocumentFactory().setXPathNamespaceURIs(xmlMap);
  19.  
  20. Node interactionId = doc.selectSingleNode("s:POOR_IN200901UV/s:creationTime/@value");
  21. System.out.println(interactionId.getText());
  22.  
  23. //当有多个item 时,指定 root = 1.2.156.456150488.1.2.1.3 的 extension 值
  24. 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");
  25. System.out.println(patientLidNode.getText());
  26. }
  27.  
  28. /**
  29. * 不太方便
  30. * @throws Exception
  31. */
  32. @Test
  33. void hl7V3Parse2() throws Exception {
  34.  
  35. String xmlPath = "D:\\BS002.xml";
  36. File xmlFile = new File(xmlPath);
  37. SAXReader reader = new SAXReader();
  38. Document doc = reader.read(xmlFile);
  39.  
  40. //添加命名空间
  41. Map<String, String> xmlMap = new HashMap<>();
  42. xmlMap.put("s", "urn:hl7-org:v3");
  43. //作用域在 XPath 上
  44. XPath xPath = doc.createXPath("s:POOR_IN200901UV/s:creationTime/@value");
  45. xPath.setNamespaceURIs(xmlMap);
  46. Node name = xPath.selectSingleNode(doc);
  47. System.out.println(name.getText());
  48. }
  49.  
  50. /**
  51. * HL7 节点太多,这种方法相当麻烦
  52. * @throws Exception
  53. */
  54. @Test
  55. void hl7V3Parse3() throws Exception {
  56. String xmlPath = "D:\\BS002.xml";
  57. File xmlFile = new File(xmlPath);
  58. SAXReader reader = new SAXReader();
  59. Document doc = reader.read(xmlFile);
  60.  
  61. Attribute name = doc.getRootElement().element("creationTime").attribute("value");
  62. System.out.println(name.getValue());
  63. }

赋值,保存 HL7 XML

  1. void hl7ParseBS004() throws Exception {
  2. String xmlPath = "D:\\BS004.xml";
  3. String savePath = "D:\\BS004_save.xml";
  4. File xmlFile = new File(xmlPath);
  5. SAXReader reader = new SAXReader();
  6. Document doc = reader.read(xmlFile);
  7.  
  8. //添加命名空间
  9. Map<String, String> xmlMap = new HashMap<>();
  10. xmlMap.put("s", "urn:hl7-org:v3");
  11.  
  12. //作用域在文档上,方便多次 select Node
  13. reader.getDocumentFactory().setXPathNamespaceURIs(xmlMap);
  14.  
  15. //消息创建时间
  16. Node creationTimeNode = doc.selectSingleNode("/s:POOR_IN200901UV/s:creationTime/@value");
  17. creationTimeNode.setText(DateUtil.format(new Date(), "yyyyMMddHHmmss"));
  18. OutputFormat outputFormat = OutputFormat.createPrettyPrint();
  19. outputFormat.setEncoding("UTF-8");
  20. XMLWriter writer = null;
  21. try {
  22. writer = new XMLWriter(new FileWriter(savePath), outputFormat);
  23. writer.write(doc);
  24. writer.flush();
  25. writer.close();
  26. } catch (Exception e) {
  27. e.printStackTrace();
  28. }
  29. }

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. CSP2023游击

    Day-1 上车了,玩了一路. 到酒店里,玩了一晚上. Day 1 爆O! Day 2 走了,玩了一路. AF0了, 哎不是,谁给我反对了 考完了,心情不是很好 分数就不说出来了吧,太低了怕你们笑话我 ...

  2. 如何实现一套简单的oauth2授权码类型认证,一些思路,供参考

    背景 组内人不少,今年陆陆续续研发了不少系统,一般都会包括一个后台管理系统,现在问题是,每个管理系统都有RBAC那一套用户权限体系,实在是有点浪费人力,于是今年我们搞了个统一管理各个应用系统的RBAC ...

  3. 4. Shell 循环语句

    重点: 条件测试. read. Shell 环境配置. case. for. find. xargs. gzip,bzip2,xz. tar. sed. 1)循环 1.1)循环执行介绍 将某代码段重复 ...

  4. 有什么巨好用Excel数据分析技巧?

    当涉及Excel数据分析时,以下是一些非常实用的技巧和功能,供您参考.这里将为您提供关于数据整理.数据清洗.统计分析.可视化和高级分析等方面的技巧. 一.数据整理与清洗: 导入数据:使用 Excel ...

  5. 存储器 Memory

    缩写 全称 翻译 用途 RAM Random Access Memory 随机存储器 SRAM Static RAM 静态RAM MCU的片上RAMCPU的L1.L2 cache DRAM Dynam ...

  6. vertx的学习总结4之异步数据和事件流

    一.异步数据和事件流 1.为什么流是事件之上的一个有用的抽象? 2.什么是背压,为什么它是异步生产者和消费者的基础? 3.如何从流解析协议数据? 1.  答:因为它能够将连续的事件序列化并按照顺序进行 ...

  7. tomcat服务器报错

    看问题 报错信息里面说 tomcat目录下conf下的aaa.xml报错 根据目录找到aaa.xml发现aaa.xml里面是空的,删除了之后就不报错了 不知道为啥这个就会报错,以前也出现过没有解决,这 ...

  8. 自定义线程池将异常"吃了"

    今天在做项目时,写了一个使用自定义线程池执行远程调用 // 删除购物车信息 corePoolExecutor.submit(() -> { try { cartFeignClient.delet ...

  9. 华企盾DSC造成扫描仪无法扫描成pdf文件

    解决方法:去掉缩略图策略,重启电脑

  10. vulntarget-d-wp

    vulntarget-d 配置信息 系统 ip kali 192.168.130.5 ubuntu 18 ip1: 192.168.130.8 ip2: 10.0.10.1 win7 10.0.10. ...