一 运用

1. maven 导入

<dependency><groupId>de.odysseus.staxon</groupId><artifactId>staxon</artifactId><version>1.3</version>
</dependency>

2. 使用配置

public class StaxonUtils {/*** @Description: json string 转 xml string*/public static String json2xmlPay(String json) {StringReader input = new StringReader(json);StringWriter output = new StringWriter();JsonXMLConfig config = new JsonXMLConfigBuilder().multiplePI(false).repairingNamespaces(false).build();try {XMLEventReader reader = new JsonXMLInputFactory(config).createXMLEventReader(input);XMLEventWriter writer = XMLOutputFactory.newInstance().createXMLEventWriter(output);writer = new PrettyXMLEventWriter(writer);writer.add(reader);reader.close();writer.close();} catch (Exception e) {e.printStackTrace();} finally {try {output.close();input.close();} catch (IOException e) {e.printStackTrace();}}// 封装xmlreturn xmlHeaderBuild(output);}/*** 头部 xml 不会自动生成,手动拼接上去** @param output* @return*/static String xmlHeaderBuild(StringWriter output) {if (output.toString().length() >= 38) {return "<?xml version=\"1.0\" encoding=\"gbk\"?>\n"+ output.toString().substring(38);}return output.toString();}/*** @Description: xml string 转 json string* @author watermelon_code* @date 2017年7月19日 上午10:50:46*/public static String xml2json(String xml) {StringReader input = new StringReader(xml);StringWriter output = new StringWriter();JsonXMLConfig config = new JsonXMLConfigBuilder().autoArray(true).autoPrimitive(false).prettyPrint(true).build();try {XMLEventReader reader = XMLInputFactory.newInstance().createXMLEventReader(input);XMLEventWriter writer = new JsonXMLOutputFactory(config).createXMLEventWriter(output);writer.add(reader);reader.close();writer.close();} catch (Exception e) {e.printStackTrace();} finally {try {output.close();input.close();} catch (IOException e) {e.printStackTrace();}}return output.toString();}public static void main(String[] args) {String tests = "  <ywxx>\n" +"            <fplxdm>31210000E476929748</fplxdm>\n" +"            <fpxx count=\"1\">\n" +"                <group xh=\"1\">\n" +"                    <fpdm>0320022002xx</fpdm>\n" +"                    <bmbbbh>42.0</bmbbbh>\n" +"                    <hsslbs>0</hsslbs>\n" +"                    <qdbz>1</qdbz>\n" +"                    <fyxm count=\"1\">\n" +"                        <group xh=\"1\">\n" +"                            <fphxz>3</fphxz>\n" +"                            <spmc>(详见销货清单)</spmc>\n" +"                            <je>111.49</je>\n" +"                            <sl>0.13</sl>\n" +"                            <se>14.51</se>\n" +"                        </group>\n" +"                    </fyxm>\n" +"                    <qdxm count=\"2\">\n" +"                        <group xh=\"1\">\n" +"                            <fphxz>0</fphxz>\n" +"                            <spmc>*食品制造机械*30CM锯刀</spmc>\n" +"                            <je>15.93</je>\n" +"                            <sl>0.13</sl>\n" +"                            <se>2.07</se>\n" +"                        </group>\n" +"                        <group xh=\"2\">\n" +"                            <fphxz>0</fphxz>\n" +"                            <spmc>*食品制造机械*30CM锯刀</spmc>\n" +"                            <je>15.04</je>\n" +"                            <sl>0.13</sl>\n" +"                            <se>1.96</se>\n" +"                        </group>\n" +"                    </qdxm>\n" +"                    <hjje>111.49</hjje>\n" +"                </group>\n" +"            </fpxx>\n" +"        </ywxx>";String s = xml2json(tests);System.out.println(s);}
}

二 属性介绍和坑

在 xml 转json 中,使用 xml2json 方法,核心配置为 jsonXMLConfig,目前了解的配置有
1. autoArray() 是否自动添加 JSON 数组边界(默认为false)。自动将xml 中的数组节点 转为 json数组,如果为false,则xml转换为字符串时,group 节点会并列,导致转json时,只会取最后一个节点,如下图所示

2. autoPrimitive() 是否自动将元素文本转换为 JSON 原语(默认为false)。为true时自动将xml值转为对应类型,直观的比如纯数字值就不会加双引号,为false 自动会将所有值转为字符串。这里有个坑就是 为true时,有些值他会自动转换,比如这里的 31210000E476929748,会转为 3.1210000E+476929755,变成科学计数法了

3. multiplePI() 是否遵守<? xml-multiple ... ?>处理指令(默认为true)
4. prettyPrint() 是否格式化输出以提高可读性 (默认为false)
5. namespaceSeparator() 用作命名空间前缀分隔符的字符(默认为’:')

java staxon 运用、属性介绍、遇到的坑相关推荐

  1. java 小坑_关于Java子父类关系的小坑

    原标题:关于Java子父类关系的小坑 学过JavaSE的都知道java类在初始化的时候,如果存在直接父类,是先初始化父类,然后才初始化子类. 子类拥有父类所有的非私有化成员,非私有的成员不仅仅包括pu ...

  2. java zip malformed_关于Java解压文件的一些坑及经验分享(MALFORMED异常)

    关于Java解压文件的一些坑及经验分享 就在本周, 测试人员找到我说现上的需求文档(zip格式的)无法预览了, 让我帮忙看看怎么回事. 这个功能也并不是我做的, 于是我便先看看线上日志有没有什么错误, ...

  3. JAVA百度鹰眼 API 遇到的坑 APP SN校验失败

    JAVA百度鹰眼 API 遇到的坑 APP SN校验失败 声明:这不是原创,只是刚好遇到,找了好久,写下来方便以后查询,代码都是复制过来的 1.总是返回sn校验失败,原因是 coords的参数有逗号, ...

  4. kotlin与java混合开发_使用kotlin和Java混合开发Android项目爬坑记录

    使用kotlin和Java混合开发Android项目爬坑记录 不定期将开发过程中遇到的问题添加在此处,加深记忆. 主要内容包括但不限于java与kotlin语言的一些区别,以及在使用android-s ...

  5. Java日常开发的21个坑,你踩过几个?

    前言 最近看了极客时间的<Java业务开发常见错误100例>,再结合平时踩的一些代码坑,写写总结,希望对大家有帮助,感谢阅读~ 1. 六类典型空指针问题 包装类型的空指针问题 级联调用的空 ...

  6. blockingqueue java_记录 Java 的 BlockingQueue 中的一些坑

    最近学习了 BlockingQueue,发现 java 的 BlockingQueue 并不是每一个实现都按照 BlockingQueue 的语意来的,其中有不少坑. 直接上代码吧: 1.关于Prio ...

  7. 时间转换竟多出1年!Java开发中的20个坑你遇到过几个?

    前言 最近看了极客时间的<Java业务开发常见错误100例>,再结合平时踩的一些代码坑,写写总结,希望对大家有帮助,感谢阅读~ 1. 六类典型空指针问题 包装类型的空指针问题 级联调用的空 ...

  8. Java集合工具类的一些坑,Arrays.asList()、Collection.toArray()...

    Arrays.asList() 使用指南 最近使用Arrays.asList()遇到了一些坑,然后在网上看到这篇文章:Java Array to List Examples 感觉挺不错的,但是还不是特 ...

  9. Java连接Access数据库的那些坑

    Java 使用 JDBC 连接Access数据库 需要掌握的技能 1.Java SE基本技术 2.懂点JDBC技术 能够学到如何使用Java正确的连接JDBC 环境 window8.1 64位 jdk ...

最新文章

  1. 如何理解导远技术手册
  2. Ubuntu中如何使得程序在后台运行
  3. 当yum 遇到No more mirrors to try
  4. class声明为final的好处
  5. 以太坊私有链 使用dev模式
  6. pat 甲级 1034. Head of a Gang (30)
  7. bson json c语言,对比平台--JSON和BSON之间的区别
  8. 企业部署BI系统怎么能一直做下去,PDCA闭环是关键
  9. 让自己的网站变成暗黑模式
  10. Eclipse启动项目报启动上下文失败问题解决方案总结
  11. Cygwin的进程管理
  12. 高程(三)--- Date
  13. 解决EXE文件无法打开的问题!
  14. Windows虚拟机忘记操作系统密码
  15. Revit导入CAD翻模丨CAD图层管理控制显示隐藏图层
  16. K3销售订单携带批号至销售出库单
  17. 【学习笔记】系统集成项目管理一:项目进度网络图(01)单双代号网络图
  18. php导航自助收录源码,最近网上流行的导航网秒收录网站php源码
  19. python开发网页视频播放器_python实现媒体播放器功能
  20. Scheme协议详细介绍

热门文章

  1. Android Studio Maven仓库设置aliyun、google、jcenter
  2. Metapsloit后渗透Windows攻击(亲测metepreter使用教程)
  3. 「一本通 1.2 例 2」Best Cow Fences
  4. 易语言打开linux里的文本文件,易语言教程读入文件和写到文件
  5. count 与 group by
  6. 数据专员面试说什么_您说什么:如何备份数据?
  7. 记录以下,Nod32的更新服务器
  8. 在网页上使用图文混排的编辑器
  9. python中条件分支语句
  10. P1118 [USACO06FEB]Backward Digit Sums G/S