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-获取页面元素值或者元素属性值
在自动化脚本编写过程中,经常需要获取页面元素的文本进行判断,以便对于不同的文本进行不同的处理.比如:很多的购物网站,加入购物车的按钮是有多个状态的(加入购物车.到货通知.暂不销售等),那么在实际的操作 ...
随机推荐
- 如何在Notepad++中轻松删除包含指定文本的字符串
如果你需要在大量文本中删除指定模式的字符串,可以使用Notepad++中的正则表达式功能.下面是一个示例,让你可以快速学会如何删除包含指定文本的字符串.我们将使用以下示例字符串: This is a ...
- RT-Thread 中 minIni 组件包无法添加的解决方法
事件 今天在 Env 下添加 minIni 包的时候出现了无法将其添加到工程的情况.借此机会来记录一下如何解决该类问题. 如果你想快速排错可以直接到 [2.minIni 组件出现的问题]查看. 一.准 ...
- Mac postman调分页接口,导出csv
准备后端接口 package com.ybchen.controller; import com.ybchen.utils.JsonData; import lombok.Data; import o ...
- 【uniapp】学习笔记day02 | uniapp搭建
起因:需要做一个小程序,家人们谁懂啊,老师我真的不会做,由于懒得看视频学习,于是只能看博客学习了. uniapp 好处: 1.不用关心适配问题 2.可以发布到各大平台的小程序 3.上手容易,使用vue ...
- 【Javaweb】四(关于接口类的作用)
这里我们还是以房产信息管理系统的题目举例: 发现在DAO层和service层都有接口类(注:impl是实现类) 为什么要用接口,不直接写实现类: 1.简单.规范性:这些接口不仅告诉开发人员你需要实现那 ...
- macOS上有哪些值得推荐的常用软件
macOS 作为一款流行的操作系统,拥有丰富的第三方软件生态系统,涵盖了各种领域的应用程序.以下将介绍一些在 macOS 上备受推崇的常用软件,并对它们进行详细的介绍和说明. 1. 生产力工具 a. ...
- XIAMEN_AMOY
第一份博客,就发布点轻松的内容吧 微雨的清晨 镜头向着前方 越过山丘 海 是像河一样的海 原来真的有随便抓一把都是贝壳的地方 青色,紫色,黄色 转行去做贝壳项链吧 如果不是去海边 那厦门不是一个很晒的 ...
- 使用CEF(七)详解macOS下基于CEF的多进程应用程序CMake项目搭建
由于macOS下的应用程序结构导致了CEF这样的多进程架构程序在项目结构.运行架构上有很多细节需要关注,这一块的内容比起Windows要复杂的多,所以本文将会聚焦macOS下基于CEF的多进程应用架构 ...
- Java8新特性之-Map
Map一些新方法的具体使用案例 1.getOrDefault:default V getOrDefault(Object key, V defaultValue) package com.qbb.th ...
- 从零玩转人脸识别验证-face
title: 从零玩转人脸识别验证 date: 2022-05-15 21:05:52.974 updated: 2023-05-16 00:00:11.594 url: https://www.yb ...