使用撇号解析XML

时间:2012-04-16 22:19:08

标签: java xml

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

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

我有一些java代码解析这个 - 但是,当标题包含撇号(如上所述)时,解析停止,所以我最终得到以下标题:学生然后继续on并解析描述(很好)。如何让它解析完整的标题?以下是我的for循环中的一段代码,我在其中解析信息:

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

完全相同的代码用于解析其他元素,如description和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。

3 个答案:

答案 0 :(得分:2)

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

HTH - DF

答案 1 :(得分:0)

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

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

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

答案 2 :(得分:-1)

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

这意味着BBC新闻RSS提要不能提供格式良好的XML。

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