【问题标题】:\b in Facebook message and XML serialization\b 在 Facebook 消息和 XML 序列化中
【发布时间】: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


【解决方案1】:

抓取 Facebook 违反了它的自动数据收集条款。除此之外,还有一个 API。

【讨论】:

  • 好吧,我使用了报废这个词,但实际上我使用的是他们自己的图形 API。这只是为了调查。
【解决方案2】:

我找到的唯一答案是使用正则表达式删除无效的 xml 1.0 字符。

我附上链接:

removing invalid XML characters from a string in java

【讨论】:

    猜你喜欢
    • 2020-11-18
    • 1970-01-01
    • 1970-01-01
    • 2011-09-29
    • 2017-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-27
    相关资源
    最近更新 更多