如下解析方式使用了:org.xml.sax.InputSource ;org.w3c.dom.Document ;org.w3c.dom.Element;
缺点:DOM API的缺点之一是消耗大量的内存,因为在该XML文档可以被导航之前,必须创建一个完整的XML文档的内存结构。而SAX API的缺点在于,它实例了一种推分析模型API,其中分析事件是由分析器生成的。比较之下,StAX则是基于一种拉分析模型。
cdaDocument : 是得到的string格式的xml内容;
StringReader str = new StringReader(cdaDocument);
InputSource is = new InputSource(str);
DocumentBuilderFactory factory = DocumentBuilderFactory
.newInstance();
DocumentBuilder builder;
String fileName_pdf = hrid + diid + heventcode + ".pdf";
builder = factory.newDocumentBuilder();
Document document = builder.parse(is);
Element rootElement = document.getDocumentElement();
// start
NodeList list1 = rootElement
.getElementsByTagName("text");
for (int i = 0; i < list1.getLength(); i++) {
Element element = (Element) list1.item(i);
String mediaType = element
.getAttribute("mediaType").toString()
.trim();
if (mediaType != null && !"".equals(mediaType)) {
if ("application/pdf".equals(mediaType)) {
NodeList list = rootElement
.getElementsByTagName("reference");
Element elementRef = (Element) list.item(i);
String brandName1 = elementRef
.getAttribute("value").toString()
.trim();
BASE64Decoder base64Decoder = new BASE64Decoder();
byte[] data = base64Decoder
.decodeBuffer(brandName1);
byte[] Buffer = new byte[1024];
int size = 0;
try {
String directory_pdf = getWebRoot()
.substring(1).replaceAll("//",
File.separator)
+ "cdapdf"
+ File.separator
+ connectIp + File.separator;
BufferedInputStream bis = new BufferedInputStream(
new ByteArrayInputStream(data));
// FileOutputStream fos1 = new
// FileOutputStream
// ("D:\\copyjava11.pdf") ;
FileOutputStream fos1 = new FileOutputStream(
directory_pdf + fileName_pdf);
BufferedOutputStream bos1 = new BufferedOutputStream(
fos1, 1024);
while ((size = bis.read(Buffer)) != -1) {
bos1.write(Buffer, 0, size);
}
bos1.flush();
bos1.close();
fos1.close();
bis.close();
} catch (Exception e) {
log.debug("存储PDF流操作失败:"
+ e.getMessage());
}
// 成功end
// 修改属性值
elementRef.setAttribute("value", "cdapdf\\"
+ connectIp + "\\" + fileName_pdf);
} else {
NodeList list = rootElement
.getElementsByTagName("reference");
Element elementRef = (Element) list.item(i);
// 修改属性值
elementRef.setAttribute("value", "");
}
}
}
TransformerFactory transformerFactory = TransformerFactory
.newInstance();
Transformer transformer = transformerFactory
.newTransformer();
DOMSource domSource = new DOMSource(document);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
// 设置编码类型
transformer.setOutputProperty(OutputKeys.ENCODING,
"GB2312");
transformer
.transform(domSource, new StreamResult(baos));
cdaDocument = baos.toString();