dom4j selectNodes 取不到值 因为XML带有命名空间 HL7
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的更多相关文章
- @Value取不到值引出的spring的2种配置文件applicationContext.xml和xxx-servlet.xml
项目中经常会用到配置文件,定义成properties的形式比较常见,为了方便使用一般在spring配置文件中做如下配置: <context:property-placeholder ignore ...
- org.apache.commons.lang3.tuple.Pair 作为更新参数,XML 中的 Sql 取不到值、报错
项目用的 Mybatis,今天改一个需求,落地实现是批量更新,且只需要根据主键(id)来更新一个字段(name). 于是,没有犹豫,像下面这样设计了数据结构: 既然是批量更新,那外层肯定是 List ...
- spring注解@Value取不到值【转】
spring注解@Value取不到值 今天在一个项目中发现一个情况,在Service中取不到name值,直接输出了{name}字符串,找了好久,最后在一篇文章中找到解决方案. 解决这个问题的一篇文章( ...
- 数据库TINYINT类型 参数0 mybatis取不到值
tinyint存储0的奇怪问题 数据库TINYINT类型 参数0 mybatis取不到值 postman 传参 audited =0 audited =1 两种情况 ...
- 控制层@Value注解取不到值
@Value("${enable-upload-image}") private String enable; 如上所示,同样的代码,写在在业务层,运行时能取到正确的值,但在控制层 ...
- [转载]ASP.NET中TextBox控件设立ReadOnly="true"后台取不到值
原文地址:http://www.cnblogs.com/yxyht/archive/2013/03/02/2939883.html ASP.NET中TextBox控件设置ReadOnly=" ...
- IE10中session失效取不到值的问题
在eworkflow工作流,ebiao报表,eform自定义表单产品升级到IE10的时候,系统登录后,总是会取不到session中的值. for j2ee版本和for dotnet版本都一样取不到值. ...
- struts2下s:iterator取不出值
1:问题起因:通过action方法连接数据库取出Arraylist集合,在前台页面遍历显示无数据,用s:debug查看 stack里有值,用了各种方法,包括session传值,但是仍然取不出来. 2: ...
- [转]用Linq取CheckBoxList選取項目的值
本文转自:http://www.dotblogs.com.tw/hatelove/archive/2011/11/17/linq-checkboxlist-items-selected-values. ...
- Selenium2学习-028-WebUI自动化实战实例-026-获取页面元素值或者元素属性值
在自动化脚本编写过程中,经常需要获取页面元素的文本进行判断,以便对于不同的文本进行不同的处理.比如:很多的购物网站,加入购物车的按钮是有多个状态的(加入购物车.到货通知.暂不销售等),那么在实际的操作 ...
随机推荐
- CSP2023游击
Day-1 上车了,玩了一路. 到酒店里,玩了一晚上. Day 1 爆O! Day 2 走了,玩了一路. AF0了, 哎不是,谁给我反对了 考完了,心情不是很好 分数就不说出来了吧,太低了怕你们笑话我 ...
- 如何实现一套简单的oauth2授权码类型认证,一些思路,供参考
背景 组内人不少,今年陆陆续续研发了不少系统,一般都会包括一个后台管理系统,现在问题是,每个管理系统都有RBAC那一套用户权限体系,实在是有点浪费人力,于是今年我们搞了个统一管理各个应用系统的RBAC ...
- 4. Shell 循环语句
重点: 条件测试. read. Shell 环境配置. case. for. find. xargs. gzip,bzip2,xz. tar. sed. 1)循环 1.1)循环执行介绍 将某代码段重复 ...
- 有什么巨好用Excel数据分析技巧?
当涉及Excel数据分析时,以下是一些非常实用的技巧和功能,供您参考.这里将为您提供关于数据整理.数据清洗.统计分析.可视化和高级分析等方面的技巧. 一.数据整理与清洗: 导入数据:使用 Excel ...
- 存储器 Memory
缩写 全称 翻译 用途 RAM Random Access Memory 随机存储器 SRAM Static RAM 静态RAM MCU的片上RAMCPU的L1.L2 cache DRAM Dynam ...
- vertx的学习总结4之异步数据和事件流
一.异步数据和事件流 1.为什么流是事件之上的一个有用的抽象? 2.什么是背压,为什么它是异步生产者和消费者的基础? 3.如何从流解析协议数据? 1. 答:因为它能够将连续的事件序列化并按照顺序进行 ...
- tomcat服务器报错
看问题 报错信息里面说 tomcat目录下conf下的aaa.xml报错 根据目录找到aaa.xml发现aaa.xml里面是空的,删除了之后就不报错了 不知道为啥这个就会报错,以前也出现过没有解决,这 ...
- 自定义线程池将异常"吃了"
今天在做项目时,写了一个使用自定义线程池执行远程调用 // 删除购物车信息 corePoolExecutor.submit(() -> { try { cartFeignClient.delet ...
- 华企盾DSC造成扫描仪无法扫描成pdf文件
解决方法:去掉缩略图策略,重启电脑
- 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. ...