【发布时间】:2015-12-28 14:08:04
【问题描述】:
我正在编写一个爬虫,它检索一些 Facebook 帖子并将它们序列化为 XML。
我的问题如下:我发现一些带有一些特殊字符(例如\b)的消息,当我将其写入我的XML时被序列化为
如果我尝试使用 Java DOM 解析器(使用 )打开这个 XML,我会收到一个错误,因为它无法解析这个字符。
我该如何解决?
数据示例:http://pastebin.com/3xEK5QbV
当我加载生成的 XML 时解析器给出的错误是:
[致命错误] out.xml:7:59: La referencia de caracteres " org.xml.sax.SAXParseException;系统标识: 文件:/Z:/Programas/Workspace%20Eclipse/workspace/Test/out.xml; 行号:7;列号:59; La referencia de caracteres " at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(未知 来源)在 com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(未知 来源)在 javax.xml.parsers.DocumentBuilder.parse(未知来源) 在 Test.loadBadXML(Test.java:43) 在 Test.(Test.java:32) 在 Test.main(Test.java:139)
关于源代码我有三个相关的源代码:
第一个:从 facebook 的 JSON 中获取“格式错误(带有 \b)”的数据:
// post is the object which contains the "post"
// URL_BASE_GRAPH, and TOKEN are constants which contains Strings necessary to create the URL for Facebook graph API
// idPost is the ID of the post that I'm retrieving
String urlStr = URL_BASE_GRAPH + idPost + "?access_token=" + TOKEN;
URL url = new URL(urlStr);
ObjectMapper om = new ObjectMapper();
JsonNode root = om.readValue(url.openStream(), JsonNode.class);
...
JsonNode message = root.get("message");
if (message != null) {
post.setMessage(message.asText());
}
第二个:把这个数据写成XML:
// outFile is the file to be written
File file = new File(outFile);
DocumentBuilderFactory docFactory = DocumentBuilderFactory
.newInstance();
DocumentBuilder docBuilder = docFactory.newDocumentBuilder();
// root elements
Document doc = docBuilder.newDocument();
Element rootElement = doc.createElement("groups");
doc.appendChild(rootElement);
....
if (post.getMessage() != null) {
Element messagePost = doc.createElement("post_message");
// I've tried also this: messagePost.appendChild(doc.createTextNode(StringEscapeUtils.escapeXml(post.getMessage())));
messagePost.appendChild(doc.createTextNode(post.getMessage()));
postEl.appendChild(messagePost);
}
....
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
transformer.setOutputProperty(OutputKeys.INDENT, "yes");
transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "2");
DOMSource source = new DOMSource(doc);
StreamResult result = new StreamResult(file);
transformer.transform(source, result);
第三个:从 XML 中再次加载 XML(格式错误为 ):
File fXmlFile = new File(f);
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
Document doc = dBuilder.parse(fXmlFile);
doc.getDocumentElement().normalize();
....
Node pstNode = postNode.item(j);
if (pstNode.getNodeType() == Node.ELEMENT_NODE) {
Element pstElement = (Element) pstNode;
String pstMessage = null;
if (pstElement.getElementsByTagName("post_message").item(0) != null)
pstMessage = pstElement.getElementsByTagName("post_message").item(0).getTextContent();
有什么想法吗?
谢谢!
【问题讨论】:
-
你得到什么错误?
-
请提供一些代码
-
我添加了源代码和错误。谢谢!
-
如果您的代码有问题,您会得到更好的响应。链接到另一个我必须剪切和粘贴 URL 的页面远非理想
-
真正的 Alastair,我是使用 StackOverflow 的新手 :-)
标签: java json xml facebook html-escape-characters