字符串转换xml文件失败.

linyfei 2011-02-23 06:56:08
我现在有个一个字符串如此:
StringBuffer result = new StringBuffer();
sb.append("<?xml version='1.0' encoding='UTF-8'?><CAPRoot><SessionHeader><ActionCode>1</ActionCode>");
sb.append("<TransactionID>17350201004150001007001</TransactionID><RspTime>20110223044205</RspTime>");
sb.append("<DigitalSign>");
sb.append("302C021446A714CEA8C0591EFEDF7CE1C1DD24F393");
sb.append("AC238D02147C1F5B0E45E6E7753C1A7ED369A63938D5DE3845");
sb.append("</DigitalSign><Response><RspType>8</RspType><RspCode>8004</RspCode>");
sb.append("<RspDesc>断言查询错误</RspDesc></Response></SessionHeader></CAPRoot>");

然后:

//读取xml格式字符串
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
dbf.setNamespaceAware(true);
log.info("DocumentBuilderFactory newDocumentBuilder xml content: "+result);
log.info("DocumentBuilderFactory newDocumentBuilder xml start: ");

Document document = dbf.newDocumentBuilder().parse(new InputSource(new StringReader(result.toString())));
System.out.println(document.toString());
Element root= document.getDocumentElement();
log.info("Document xml DocumentElement root: "+root);
NodeList list = root.getChildNodes();

可是现在为什么xml文件创建不能成功呢,得到的document依旧还是null的。
...全文
191 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
heardy 2011-02-24
  • 打赏
  • 举报
回复
LZ的方法获取显示的document 确实是 null [#document: null]

但是 获取Element element = document.getDocumentElement();
System.out.println(element.getTagName());//CAPRoot

能够打印信息 那么说document不是空的 只是toString打印的信息有问题
yaoweijq 2011-02-24
  • 打赏
  • 举报
回复
		StringBuffer sb = new StringBuffer();
sb.append("<?xml version='1.0' encoding='UTF-8'?><CAPRoot><SessionHeader><ActionCode>1</ActionCode>");
sb.append("<TransactionID>17350201004150001007001</TransactionID><RspTime>20110223044205</RspTime>");
sb.append("<DigitalSign>");
sb.append("302C021446A714CEA8C0591EFEDF7CE1C1DD24F393");
sb.append("AC238D02147C1F5B0E45E6E7753C1A7ED369A63938D5DE3845");
sb.append("</DigitalSign><Response><RspType>8</RspType><RspCode>8004</RspCode>");
sb.append("<RspDesc>断言查询错误</RspDesc></Response></SessionHeader></CAPRoot>");
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
dbf.setNamespaceAware(true);

Document document = dbf.newDocumentBuilder().parse(new java.io.ByteArrayInputStream(sb.toString().getBytes("utf-8")));
//System.out.println(document.toString());new InputSource(new StringReader(result.toString()))
// Document document = dbf.newDocumentBuilder().parse(new InputSource(new StringReader(sb.toString())));
Element root= document.getDocumentElement();
System.out.println(root.getNodeName());
NodeList list = root.getChildNodes();

可以试这个
其实注释掉的用inputsource也是可行的
root.getNodeName()能拿到就已经成功解释了
注意看api中参数说明
ybcwjj 2011-02-24
  • 打赏
  • 举报
回复
楼上说的只是另外一种处理方式,
lz的那种方式为什么不行?帮顶
heardy 2011-02-24
  • 打赏
  • 举报
回复
document.toString 打印的不是内容 需要打印内容 应该调用document.asXML()

要保存成xml文件 需要用流来操作document
heardy 2011-02-24
  • 打赏
  • 举报
回复
// 创建一个读取XML文件的对象
SAXReader reader = new SAXReader();
// 创建一个文档对象
Document document = null;// reader.read(file);
document = reader.read(new StringReader(XMLStr));// 读取字符串XML

// 获取文件的根节点
Element element = document.getRootElement();
苍狼回眸 2011-02-24
  • 打赏
  • 举报
回复
我不知道document的toString()方法是如何实现的,但document的确不是null,document.getXmlEncoding()可以得到正确的结果
t150ckh 2011-02-24
  • 打赏
  • 举报
回复
帮顶,测试了下确实如此。
linyfei 2011-02-24
  • 打赏
  • 举报
回复
感谢各位老大了,已经解决了。ok,结账!

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧