(一)将自定义的非标准的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>