Java \b在Facebook消息和XML序列化中

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

我正在编写一个爬虫程序,它检索一些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数据:

// 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。这只是为了调查。