解析xml格式的string内容并修改节点内容

如下解析方式使用了: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();
					


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值