目录
一:记一次让我多加半个小时的xml解析问题
1:接受的报文
最近在做消息中间件接受数据的需求 ,对方发xml文件发我,还没到编码就没注意看报文了,当我开始敲代码的时候需要解析这个xml文件的时候 ,心里一万个草泥马在奔腾,下面先看看数据结构,如下图
2:合理的报文格式
大家看到出来有什么蹩脚的地方没有,再看看我希望的数据结构是啥样
3:处理方式
对比下 这两个报文 有啥不同嘛 ,第二个报文比第一个报文 多了一个节点,这多了一个节点 我就可以用工具类,一行代码就能转换成我想要的数据,如果是上面的那个结构,在实际解析过程中不知道会有多少个itab节点 ,处理起来还是比较麻烦,如果如我所愿的化,多个employees节点,解析的时候就不用关系实际有多少个itab节点,用List<Object> 对象来接,多方便,因为这是个很老的接扣,没办法让别人动 ,只能 自己硬编码去解析这个玩意。
我用的是dom4j来解析
List employee = document.selectNodes("/MbfService/input1/MbfBody/iTab");
Iterator itemp = employee.iterator();
while (itemp.hasNext()) {
ITab iTab = new ITab();
Element elm = (Element) itemp.next();
// 所有一级子节点的list
List<Element> listElement = elm.elements();
Iterator subList = listElement.iterator();
int i = 0;
while (subList.hasNext()) {
Element subElm = (Element) subList.next();
if (i == 0) {
//拿到数据后进行解密 0:表示姓名
String value = decryptValue(randomSecrity, subElm.getText());
iTab.setName(value);
}
}
在执行到第一行的时候 报错 提示 ClassNotFoundException ,就这个错误 让多加了帮个小时 ,这个错误大家应该经常看到吧 ,我看到却没有关注,以为是方法使用的问题,dom4j已经很久没关注过,或者使用,还是大学刚毕业那会用到的 ,后来找了度量 ,才发发现是少了类,然后重新加了依赖,问题解决了,白白的多加了半个小时。
依赖 我贴在下方
<dependency>
<groupId>com.fasterxml.jackson.dataformat</groupId>
<artifactId>jackson-dataformat-xml</artifactId>
<version>2.8.11</version>
</dependency>
<!-- https://mvnrepository.com/artifact/jaxen/jaxen -->
<dependency>
<groupId>jaxen</groupId>
<artifactId>jaxen</artifactId>
<version>1.1.6</version>
</dependency>
问题到这 解决了,记录下 。同事在参考之前的项目的写法 ,使用了模板模式,有xml和json两种格式的消息。