【问题标题】:Parsing XML with apostrophe用撇号解析 XML
【发布时间】:2012-04-17 07:44:48
【问题描述】:

以BBC新闻RSS提要为例,他们的一条新闻如下:

<item><title>Pupils 'bullied on sports field'</title><description>bla bla..

我有一些 java 代码对此进行解析 - 但是,当标题包含撇号(如上)时,解析停止,所以我最终得到以下标题:Pupils ' 然后它继续打开并解析描述(这很好)。我如何让它解析完整的标题?以下是我解析信息的 for 循环内部的一段代码:

                    NodeList title = element.getElementsByTagName("title");
                    Element line = (Element) title.item(0);
                    tmp.setTitle(getCharacterDataFromElement(line).toString());

完全相同的代码用于解析描述和pubDate等其他元素,这些都很好。

这是 getCharacterDataFromElement 方法:

public static String getCharacterDataFromElement(Element e) {
    Node child = ((Node) e).getFirstChild();
    if (child instanceof CharacterData) {
        CharacterData cd = (CharacterData) child;
        return cd.getData();
    }
    return "";
}

我做错了什么?我使用 DocumentBuilder、DocumentBuilderFactory 和 org.w3c.dom 来处理 RSS Feed。

【问题讨论】:

    标签: java xml


    【解决方案1】:

    您的 getCharacterDataFromElement 仅查看第一个子元素 - 查看是否还有其他子元素并将所有文本粘贴在一起

    HTH - DF

    【讨论】:

      【解决方案2】:

      正如 davidfrancis 所建议的,您应该遍历 getCharacterDataFromElement() 中的所有孩子。

      或者,如果您可以使用 DOM 级别 3,则可以使用 Node.getTextContent() 方法来代替您想要的。

      NodeList title = element.getElementsByTagName("title");
      Element line = (Element)title.item(0);
      tmp.setTitle(line.getTextContent());
      

      【讨论】:

        【解决方案3】:

        嗯,AFAIK,撇号是 XML 中的保留字符,因此应编码为 &amp;apos;

        这意味着 BBC 新闻 RSS 提要不提供格式正确的 XML。

        最好的办法是向 BBC 新闻 RSS 提要提供商发布错误报告,以便他们修复它。

        【讨论】:

          猜你喜欢
          • 2012-08-13
          • 1970-01-01
          • 1970-01-01
          • 2010-12-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-10-21
          • 1970-01-01
          相关资源
          最近更新 更多