2012-04-16 61 views
2

以例如BBC新闻RSS源,他们的新闻项目之一如下:解析XML与撇号

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

我有一些Java代码解析这一点 - 但是,当标题中包含撇号(如上面),解析停止,所以我最终得到以下标题:学生的然后它继续并解析描述(这很好)。我如何才能解析完整的标题?下面是一个代码段从内我的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。

回答

0

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

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

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

这工作得很好,谢谢。 – Nicklas 2012-04-17 16:09:51

2

你getCharacterDataFromElement仅着眼于第一个孩子 - 看是否有进一步的子元素过多和粘性的所有文字一起

HTH - DF

-1

嘛,据我所知,撇号是XML保留字符和因此应编码为&apos;

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

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

+0

为什么downvote? – Puce 2012-08-23 08:05:17