package org.scbit.lsbi.scp.utils;

import java.util.ArrayList;
import java.util.List; import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.scbit.lsbi.scp.utils.enums.TemplateDeviceEnum;
import org.scbit.lsbi.scp.vo.TemplateDeviceFormVo;
import org.scbit.lsbi.scp.vo.TemplateDeviceVo; public class CurrentXMLUtil { // 封装数据到XML
public static String createXML(TemplateDeviceFormVo templateDeviceFormVo) {
List<TemplateDeviceVo> templateDeviceVo = templateDeviceFormVo.getTemplateDeviceVos();
Document doc = DocumentHelper.createDocument();
doc.setXMLEncoding("UTF-8");
Element root = doc.addElement("custom");
for (int i = 0; i < templateDeviceVo.size(); i++) {
Element iterm = root.addElement("iterm");
iterm.addAttribute("filed", templateDeviceVo.get(i).getParamId());
iterm.addElement("name").setText(templateDeviceVo.get(i).getFiledName());
iterm.addElement("code")
.setText(ChineseInitials.getPinYinHeadChar(templateDeviceVo.get(i).getFiledName(), 1));
String typ = TemplateDeviceEnum.getCnName(templateDeviceVo.get(i).getType());
Element type = iterm.addElement("type").addAttribute("value", typ);
if ("radio".equals(templateDeviceVo.get(i).getType())
|| "select".equals(templateDeviceVo.get(i).getType())) {
if (templateDeviceVo.get(i).getOptions() != null)
for (int j = 0; j < templateDeviceVo.get(i).getOptions().size(); j++) {
type.addElement("option").setText(templateDeviceVo.get(i).getOptions().get(j));
}
if (StringUtil.hasText(templateDeviceVo.get(i).getSelect())) {
iterm.addElement("normalValue").setText(templateDeviceVo.get(i).getOptions()
.get(Integer.parseInt(templateDeviceVo.get(i).getSelect().length() + "") - 2));
}
}
if ("number".equals(templateDeviceVo.get(i).getType())
&& StringUtil.hasText(templateDeviceVo.get(i).getLocalUnit())
&& !StringUtil.hasText(templateDeviceVo.get(i).getMaxNum())) {
iterm.addElement("meunit").setText(templateDeviceVo.get(i).getLocalUnit());
iterm.addElement("number").setText(templateDeviceVo.get(i).getSignVal());
iterm.addElement("sign").setText(templateDeviceVo.get(i).getSign());// templateDeviceVo.get(i).getSign();
}
if ("number_value".equals(templateDeviceVo.get(i).getType())
&& StringUtil.hasText(templateDeviceVo.get(i).getMaxNum())
&& StringUtil.hasText(templateDeviceVo.get(i).getRangeUnit())) {
iterm.addElement("meunit").setText(templateDeviceVo.get(i).getRangeUnit());
iterm.addElement("min").setText(templateDeviceVo.get(i).getMinNum());
iterm.addElement("max").setText(templateDeviceVo.get(i).getMaxNum());
}
if ("yin_yang".equals(templateDeviceVo.get(i).getType())) {
if (templateDeviceVo.get(i).getOptions() != null) {
for (int j = 0; j < templateDeviceVo.get(i).getOptions().size(); j++) {
type.addElement("option").setText(templateDeviceVo.get(i).getOptions().get(j));
}
}
if (StringUtil.hasText(templateDeviceVo.get(i).getSelect())) {
iterm.addElement("normalValue").setText(templateDeviceVo.get(i).getSelect());
}
} }
return doc.asXML(); } public static TemplateDeviceFormVo parseXML(String xml) {
Document doc = null;
Element root = null;
TemplateDeviceFormVo templateDeviceFormVo = new TemplateDeviceFormVo();
try {
doc = DocumentHelper.parseText(xml);
root = doc.getRootElement();
List<Element> elements = root.elements();
List<TemplateDeviceVo> templateDeviceVos = new ArrayList<>();
for (int i = 0; i < elements.size(); i++) {
TemplateDeviceVo templateDeviceVo = new TemplateDeviceVo();
Element iterm = elements.get(i);
String name = iterm.elementText("name");
String code = iterm.elementText("code");
String type = iterm.element("type").attribute("value").getText();
String paramId = iterm.attribute("filed").getText();
templateDeviceVo.setParamId(paramId);
templateDeviceVo.setFiledName(name);
templateDeviceVo.setCode(code);
templateDeviceVo.setType(type);
if (iterm.element("type").hasContent()) {
List<Element> options = iterm.element("type").elements("option");
List<String> ops = new ArrayList<>();
for (Element option : options) {
String opText = option.getText();
ops.add(opText);
}
templateDeviceVo.setOptions(ops); }
if (iterm.element("normalValue") != null) {
templateDeviceVo.setSelect(iterm.element("normalValue").getText());
}
if (iterm.element("meunit") != null && iterm.element("max") == null) {
templateDeviceVo.setLocalUnit(iterm.element("meunit").getText());
templateDeviceVo.setSignVal(iterm.element("number").getText());
templateDeviceVo.setSign(iterm.element("sign").getText());
}
if (iterm.element("meunit") != null && iterm.element("max") != null) {
templateDeviceVo.setRangeUnit(iterm.element("meunit").getText());
templateDeviceVo.setMinNum(iterm.element("min").getText());
templateDeviceVo.setMaxNum(iterm.element("max").getText());
} templateDeviceVos.add(templateDeviceVo);
}
templateDeviceFormVo.setTemplateDeviceVos(templateDeviceVos); } catch (DocumentException e) {
e.printStackTrace();
} return templateDeviceFormVo;
}
}

  maven包:

                <dependency>
<groupId>dom4j</groupId>
<artifactId>dom4j</artifactId>
<version>1.6.1</version>
</dependency>

  XML示例:

 <?xml version="1.0" encoding="UTF-8"?>
<custom>
<iterm filed="">
<name>白细胞数</name>
<code>bxb</code>
<type value="数字"></type>
<meunit>个</meunit>
<min>4</min>
<max>10</max>
</iterm>
<iterm filed="">
<name>白细胞数</name>
<code>bxb</code>
<type value="数字"></type>
<meunit>个</meunit>
<number>20</number>
</iterm>
<iterm filed="">
<name>细菌阴阳性</name>
<code>zc</code>
<type value="单选框">
<option >阴</option>
<option>阳</option>
</type>
<required>false</required>
<normalValue>阴</normalValue>
</iterm>
<iterm filed="">
<name>照片</name>
<code>tp</code>
<type value="图片"></type>
<required>false</required>
</iterm>
<iterm filed="">
<name>描述</name>
<code>ms</code>
<type value="文本框"></type>
<required>false</required>
</iterm>
</custom>

java dom4j封装和解析XML的更多相关文章

  1. 使用dom4j创建和解析xml文件

    使用dom4j创建和解析xml文件 在项目开发中,我们经常会遇到xml文件的创建和解析从别人接口得到的xml文件,而我们最常使用的组件是dom4j. 下面我就以代码来讲解一下如何使用dom4j来创建x ...

  2. dom4j生成和解析xml文件

    dom4j生成和解析xml文件 要生成和解析如下格式的xml文件: <?xml version="1.0" encoding="UTF-8"?> & ...

  3. DOM4J生成、解析XML实例

    import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.util.Iterato ...

  4. java使用dom4j和XPath解析XML与.net 操作XML小结

    最近研究java的dom4j包,使用 dom4j包来操作了xml 文件 包括三个文件:studentInfo.xml(待解析的xml文件), Dom4jReadExmple.java(解析的主要类), ...

  5. 浅谈 Java 主流开源类库解析 XML

    在大型项目编码推进中,涉及到 XML 解析问题时,大多数程序员都不太会选用底层的解析方式直接编码. 主要存在编码复杂性.难扩展.难复用....,但如果你是 super 程序员或是一个人的项目,也不妨一 ...

  6. JAVA中使用DOM解析XML文件

    XML是一种方便快捷高效的数据保存传输的格式,在JSON广泛使用之前,XML是服务器和客户端之间数据传输的主要方式.因此,需要使用各种方式,解析服务器传送过来的信息,以供使用者查看. JAVA作为一种 ...

  7. 简单用DOM4J结合XPATH解析XML

    由于DOM4J在解析XML时只能一层一层解析,所以当XML文件层数过多时使用会很不方便,结合XPATH就可以直接获取到某个元素 使用dom4j支持xpath的操作的几种主要形式    第一种形式   ...

  8. Flex与Java交互(Flex调用java类展示数据)解析xml展示数据

    Flex与java通信最简单例子(详细说明了各种需要注意的配置):http://blog.csdn.net/u010011052/article/details/9116869 Flex与java通信 ...

  9. 使用dom4j创建和解析xml

    之前工作中用到了,相信写java的都会碰到xml,这里写了两个方法,创建和解析xml,废话不多说,直接上代码 package xml; import java.io.File; import java ...

随机推荐

  1. 一个python的邮件发送脚本,自动,定时,可以附件发送,抄送,附有说明文件

    #!/bin/env python # -*- coding: utf-8 -*- import datetime import smtplib import os,sys from email.mi ...

  2. C程序设计语言学习笔记

    在Windows下运行C语言程序 Windows下的编程工具使用 VC 6.0,下面讲解如何在VC 6.0下运行上节的"Hello, world"程序. 1) 新建Win32 Co ...

  3. Django框架

    一.首先,到底什么是框架? 想要回答这个问题,我们要慢慢来. ①首先从DRY原则开始说起 Don't Repeat Yourself,不要重复你的代码. DRY原则的重要性怎么提都不过分,很多人说编程 ...

  4. jQuery 事件方法

    事件方法触发器或添加一个函数到被选元素的事件处理程序. 下面的表格列出了所有用于处理事件的 jQuery 方法. 方法 描述 bind() 向匹配元素附加一个或更多事件处理器 blur() 触发.或将 ...

  5. 如何在网页标题栏加入logo图标?

    标题栏: <link rel="icon" href="ico地址" type="image/x-icon">收藏夹:<l ...

  6. javascript中正则实现读取当前url中指定参数值方法。

    getQueryString:function(name) { var reg = new RegExp("(^|&)"+ name +"=([^&]*) ...

  7. cookie

    1.基本操作 Cookie是由服务器端生成,发送给User-Agent(一般是浏览器),浏览器会将Cookie的key/value保存到某个目录下的文本文件内,下次请求同一网站时就发送该Cookie给 ...

  8. Chrome 开发工具之Sources

    Sources面板主要用于查看web站点的资源列表及javascript代码的debug 熟悉面板 了解完面板之后,下面来试试这些功能都是如何使用的. 文件列表 展示当前页面内所引用资源的列表,和平常 ...

  9. zookeeper原理解析-序列化

    1)底层通信数据封装与操作           BinaryInputArchive& BinaryOutputArchive底层通信数据封装与操作     BinaryInputArchiv ...

  10. bzoj 4610 Ceiling Functi

    bzoj 4610 Ceiling Functi Description bzoj上的描述有问题 给出\(n\)个长度为\(k\)的数列,将每个数列构成一个二叉搜索树,问有多少颗形态不同的树. Inp ...