Java \b在Facebook消息和XML序列化中
我正在编写一个爬虫程序,它检索一些Facebook帖子并将它们序列化为XML 我的问题如下:我发现一些带有一些特殊字符的消息,如\b,当我将其写入XML时,会被序列化为&8 如果我尝试使用&8;的Java DOM解析器打开此XML;,我得到一个错误,因为它无法解析这个字符 我怎样才能解决它 数据示例: 加载生成的XML时,解析器给出的错误是: [致命错误]out.xml:7:59:La referencea de caracteres& org.xml.sax.SAXParseException;系统ID: 文件:/Z:/Programas/Workspace%20Eclipse/Workspace/Test/out.xml; 行号:7;栏目号:59;卡拉克特参考酒店 com.sun.org.apache.xerces.internal.parsers.DOMParser.parseUnknown 来源于 com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parseUnknown 源代码:javax.xml.parsers.DocumentBuilder.parseUnknown源代码 java:43 at Test.Test.java:32 at Test Test.mainTest.java:139 关于源代码我有三个相关的源代码: 第一个:从facebook从JSON获取格式错误的\b数据:Java \b在Facebook消息和XML序列化中,java,json,xml,facebook,html-escape-characters,Java,Json,Xml,Facebook,Html Escape Characters,我正在编写一个爬虫程序,它检索一些Facebook帖子并将它们序列化为XML 我的问题如下:我发现一些带有一些特殊字符的消息,如\b,当我将其写入XML时,会被序列化为&8 如果我尝试使用&8;的Java DOM解析器打开此XML;,我得到一个错误,因为它无法解析这个字符 我怎样才能解决它 数据示例: 加载生成的XML时,解析器给出的错误是: [致命错误]out.xml:7:59:La referencea de caracteres& org.xml.sax.SAXParseException
// 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,并使用&8;从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();
有什么想法吗
谢谢 删除Facebook违反了它的自动数据收集条款。除此之外,还有一个API。我找到的唯一答案是使用regexp删除无效的xml 1.0字符 我附上链接:
你会遇到什么错误?还有一些代码。我已经添加了源代码和错误。谢谢如果您的代码在问题中,您将得到更好的响应。链接到另一个我必须剪切和粘贴URL的页面远远不是理想的Alastair,我是使用StackOverflow的新手:-好吧,我使用术语“废弃”,但事实上我使用的是他们自己的graph API。这只是为了调查。