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-获取页面元素值或者元素属性值
在自动化脚本编写过程中,经常需要获取页面元素的文本进行判断,以便对于不同的文本进行不同的处理.比如:很多的购物网站,加入购物车的按钮是有多个状态的(加入购物车.到货通知.暂不销售等),那么在实际的操作 ...
随机推荐
- P-III曲线水文频率计算程序(方法)
P-III曲线水文频率计算程序(方法) 最近遇到水文频率曲线拟合计算相关的问题,在网上查阅了一下,毕竟是专业性比较强的知识内容,好像没有比较系统全面的资料,一时兴起,做了一些研究,总结了一下所了解的一 ...
- HDL刷题:Count clock
原题链接 要写一个12小时的时钟. 由题目得知,reset信号的优先级最高,其次是enable,这里很好实现. 我的思路: 写了一个4位的bcd计数器,并实例化了4个,对ss与mm的[7:4]与[3: ...
- 牛客多校第二场 I.Penguins
题意 两个企鹅,一个从地图的右下角走右上角,一个从另一个地图的左下角走到左上角,我们操控左边的企鹅,右边的企鹅与左边企鹅运动规则如下. 左边企鹅向左,右边企鹅向右 左边企鹅向右,右边企鹅向左 左边企鹅 ...
- 深入理解RC4加密算法
RC4(Rivest Cipher 4)是一种广泛应用的加密算法,由Ronald L. Rivest于1987年发明.它是一种流密码(stream cipher)算法,适用于对网络通信中的数据进行加密 ...
- C#中LINQ的使用知多少?LINQ常功能整理,实例源代码解析
LINQ(Language-Integrated Query)是C#语言中的一个强大的查询技术,它提供了一种统一的查询语法,可以用于查询和操作各种数据源,包括集合.数据库.XML等.下面详细描述了LI ...
- Centos 7在线安装JDK1.8+Tomcat+MySQL8.0+Nginx
一.安装JDK 注: 以下命令环境在Xshell中进行. 温馨提示: 在线安装方式需要有网速的前提,有的软件下载需要大量时间. 1.查询出系统自带的OpenJDK及版本 rpm -qa | grep ...
- Element的安装与基本使用
一.什么是Element? Element是饿了么团队研发的一套为开发者与设计师等准备的基于Vue2.0的桌面端组件库,使开发人员可以快速拼凑出一套页面 组件:组成网页的部件,例如:超链接,按钮,图片 ...
- 【scikit-learn基础】--『数据加载』之外部数据集
这是scikit-learn数据加载系列的最后一篇,本篇介绍如何加载外部的数据集. 外部数据集不像之前介绍的几种类型的数据集那样,针对每种数据提供对应的接口,每个接口加载的数据都是固定的.而外部数据集 ...
- jvm的jshell,学生的工具
jshell 在我眼里,只能作为学校教学的一个玩具,事实上官方也做了解释,以下是官方的解释: 在学习编程语言时,即时反馈很重要,并且 它的 API.学校引用远离Java的首要原因 教学语言是其他语言 ...
- Rong晔大佬教程学习(1):背景与项目设计目标
riscv实际上是一种ISA的指令集,而处理器的设计的基本结构是不变的(如下所示),其区别在于所选用的指令集的类型,一般有ARM.RISCV.MIPS等,采用了不同的引擎,那么车的外观.系统等也会随之 ...