一 运用

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. [swift]-使用JavaScript解决WKWebView无法发送POST参数问题
  2. python 柱状图-python 柱状图
  3. (仿头条APP项目)5.列表页面设计实现
  4. C# window forms Treeview checkbox子节点和父节点相互选中的关系
  5. ios 自定义字体_如何仅用几行代码在iOS应用中创建一致的自定义字体
  6. JAVA和C浮点数,为什么在C ++和Java中使用float函数会产生不同的结果?
  7. linux删除文件里夹命令,Linux删除文件(夹)、创建文件(夹)命令是什么
  8. linux怎么装vnc插件,linux下安装基于GNOME的VNC连接工具Vinagre
  9. docker管理神器—kubernetes—直接路由篇
  10. 人脸识别考勤机软件驱动安装和设置
  11. 智能手机内存完全透析
  12. 【论文笔记】Learning to Count in the Crowd from Limited Labeled Data
  13. 自动化办公|办公软件和亿图脑图MindMaster快捷键
  14. 树莓派使用cgminer挖矿测试
  15. JavaWeb入门(四) I-O
  16. kubernetes 教程 笔记
  17. 【华为OD机试真题2023 JAVA】几何平均值最大子数组
  18. pinyin4j把中文句子(含有多音字字母)转成拼音(二维数组递归求所有组合情况返回list)算法实现!
  19. 必读 | 深入理解 Flutter 的布局约束
  20. 华为OJ 字符串分割

热门文章

  1. Allegro如何快速删除孤立铜皮操作指导
  2. 《手把手教你》系列练习篇之9-python+ selenium自动化测试 -番外篇 - 最后一波啊!!!(详细教程)
  3. 【AI实战】微小目标检测模型MMDet-RFLA--训练环境从零开始搭建
  4. SEO教程:免费分享SEO外链建设方法不可错过
  5. c mysql win8.1,Win8/8.1/Win7小技巧:揪出C盘空间占用的真凶 - IT之家
  6. 如何搜索某一特定网站的内容
  7. ARM与x86之3--蝶变ARM
  8. Java学习框架的正确顺序,你知道吗?
  9. 详解 | 大数据在智慧城市中的应用
  10. 【记录】批处理文件提取 (2020.8.26)