gpt4 book ai didi

Java:解析 RSS 提要时出错

转载 作者:行者123 更新时间:2023-12-02 02:11:43 25 4
gpt4 key购买 nike

您可以在下面看到代码。

public static void main(String[] args) throws Exception {
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
factory.setValidating(true);
factory.setIgnoringElementContentWhitespace(true);
DocumentBuilder builder = factory.newDocumentBuilder();

Document doc = builder.parse("http://rss.adnkronos.com/RSS_Politica.xml");

NodeList nodes = doc.getElementsByTagName("title");

for(int k=0; k < nodes.getLength(); k++) {
System.out.print(nodes.item(k));
}

}

RSS feed 的链接如下:http://rss.adnkronos.com/RSS_Politica.xml

结果(在控制台中)如下:

null null null null null null null null null null null null null null null null null null null null null

正如您在 xml 中看到的,节点标题的值显然不为 null。

结果后,显示以下错误(翻译自意大利语)。

Error: URI=http://rss.adnkronos.com/RSS_Politica.xml Line=1: The root element "rss" must match the root DOCTYPE "null".

Error: URI=http://rss.adnkronos.com/RSS_Politica.xml Line=1: Document is invalid: no grammar found.

最佳答案

有两个问题。让我们先处理您可能最关心的问题。

NodeList 中的节点是 Element 节点。实际的文本节点是它们的子节点。因此,要获得您想要的值,您可以执行以下操作:

nodes.item(k).getFirstChild().getNodeValue()

或者(在本例中):

nodes.item(k).getTextContent()

我个人认为前者在进行一般解析时稍微稳健一些,因为如果碰巧有多个子节点,getTextContent() 将会连接所有子节点的所有文本内容。

至于验证错误,默认情况下,当您执行 setValidating(true) 时,它会查找嵌入的 DTD,但该 DTD 不存在,并且它会向您提示。 tl;dr 是 setValidating(false)。

如果您确实想要验证 RSS,您应该尝试找到一个非官方(因为没有官方)XSD 架构文件,并将其设置在您的 DocumentBuilderFactory 中。不过,在这种情况下使用 XSD 进行 RSS 可能不值得,因为互联网上一半的 RSS 虽然完全可用,但可能会失败验证:)。

关于Java:解析 RSS 提要时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49905049/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com