解析非标准的xml并生成标准的xml后解析

(一)将自定义的非标准的xml转为标准的xml

//realPath 被读取的非标准的xml文件路径
public void analysisXml(String realPath)
throws ParserConfigurationException, SAXException, IOException,
DocumentException, JAXBException {
// 将不标准的xml转为字符串
String fileToString = FileUtils.readFileToString(new File(realPath));
// 将字符串加入声明及根节点以标注xml
StringBuilder sb = new StringBuilder();
sb.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
sb.append("");
sb.append(fileToString);
sb.append("");

//新生成的标准的xml的路径
String fileNameTmp = “c:/app/new.xml”;
File file = new File(fileNameTmp);
// 判断该文件是否存在,若不存在则创建一个xml文件
if (!file.exists()) {
file.createNewFile();
}
//将标准的xml字符串解析并转换成一个新的符合标准的xml
outputXml(fileNameTmp, sb.toString());
//解析新的符合标准的xml并获取数据
analysisNewXml(fileNameTmp );



//将标准的xml字符串解析并转换成一个新的符合标准的xml
//fileName:文件名 str:xml字符串
public static void outputXml(String fileName, String str) throws IOException {
SAXReader saxReader = new SAXReader();
Document document;
try {
//将字符串读取成流形式并写入到xml文档中
document = saxReader.read(new ByteArrayInputStream(str
.getBytes(“UTF-8”)));
OutputFormat format = OutputFormat.createPrettyPrint();
XMLWriter writer = new XMLWriter(
new FileWriter(new File(fileName)), format);
writer.write(document);
writer.close();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (DocumentException e) {
e.printStackTrace();
}
}

(二)解析标准的xml并获取值

//使用jaxb将xml解析为javabean对象
public Object xmlToBean(String xmlPath) throws JAXBException, IOException {
JAXBContext context = JAXBContext.newInstance(Information.class);
Unmarshaller unmarshaller = context.createUnmarshaller();
Object object = unmarshaller.unmarshal(new File(xmlPath));
return object;
}



//将javabean对象遍历存入数据库中
public void analysisNewXml(String xmlPath) throws JAXBException,
IOException {
//调用xml解析为javabean对象方法将xml转为对象
Object object = xmlToBean(xmlPath);
Information documents = (Information) object;
List documentList = documents.getDocuments();
//documentList对象就是xml中的根节点下的第一个子节点,jaxb获取值得方法可参考另一篇博客或他人博客
}

(三)本人的非标准的xml模板

<Msg>
<ResultCode>AAA000</ResultCode>
<ResultDesc>查询成功</ResultDesc>
<ReportMessage>
<PRH>
<PA01>
<PA01A>
<PA01AI01>2019051016480051294174</PA01AI01>
<PA01AR01>2019-05-10T16:48:00</PA01AR01>
</PA01A>
<PA01B>
<PA01BQ01>王芳</PA01BQ01>
<PA01BD01>10</PA01BD01>
<PA01BI01>110106197808294226</PA01BI01>
</PA01B>
</PA01>
</PRH>
<PIM>
<PB01/>
</PIM>
<PMM/>
<PRM/>
<POM/>
<PSM>
<PC01>
<PC010Q01>-1</PC010Q01>
</PC01>
</PSM>
<PHF/>
</ReportMessage>
<Name>王芳</Name>
<IDType>10</IDType>
<IDNum>110106197808294226</IDNum>
</Msg>
</Document>

		
	
		
		
		
	




























  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值