Java中从WordPress源解析XML

3
private void parseXml(String urlPath) throws Exception {
    URL url = new URL(urlPath);
    URLConnection connection = url.openConnection();
    DocumentBuilder db = DOCUMENT_BUILDER_FACTORY.newDocumentBuilder();

    final Document document = db.parse(connection.getInputStream());
    XPath xPathEvaluator = XPATH_FACTORY.newXPath();
    XPathExpression nameExpr = xPathEvaluator.compile("rss/channel/item/title");
    NodeList trackNameNodes = (NodeList) nameExpr.evaluate(document, XPathConstants.NODESET);
    for (int i = 0; i < trackNameNodes.getLength(); i++) {
        Node trackNameNode = trackNameNodes.item(i);
            System.out.println(String.format("Blog Entry Title: %s" , trackNameNode.getTextContent()));
        XPathExpression artistNameExpr = xPathEvaluator.compile("rss/channel/item/content:encoded");
        NodeList artistNameNodes = (NodeList) artistNameExpr.evaluate(trackNameNode, XPathConstants.NODESET);
        for (int j=0; j < artistNameNodes.getLength(); j++) {
            System.out.println(String.format(" - Artist Name: %s", artistNameNodes.item(j).getTextContent()));
        }
    }
}

我有一个用于解析默认WordPress XML中标题和内容的代码,唯一的问题是当我尝试获取博客条目的内容时,XML标签为:<content:encoded> ,我不知道如何检索这些数据?


1
分享XML文件或其中的一小部分以查看其结构。同时考虑使用JAXB。 - harshit
http://wordpress.org/news/feed/ 我正在尝试解析的XML格式与此相同。 - Ross J
@beny23,你成功获取了content:encoded值的数据吗? - alex
@alex 我只是编辑了帖子,没有提出问题。 - beny23
2个回答

1

标签<content:encoded>表示XML命名空间中带有前缀content的元素encoded。XPath评估器可能无法将content前缀解析为其命名空间,我认为可以通过快速谷歌搜索得到它的命名空间是http://purl.org/rss/1.0/modules/content/

要使其解析,请执行以下操作:

  1. 确保在构建后调用了setNamespaceAware(true)以启用命名空间感知功能,否则在解析期间将丢弃所有命名空间。
  2. 编写一个实现javax.xml.namespace.NamespaceContext的类来将前缀解析为其命名空间(doc)。
  3. 使用您的实现调用XPath#setNamespaceContext()

抱歉,我不理解第二部分,但感谢您的帮助。 - Ross J

0
你也可以尝试使用XStream,这是一个好用且易于使用的XML解析器。它使得你在解析已知XML结构时几乎不需要任何工作。
PS:他们的网站目前已经下线了,可以使用Google缓存查看它=P

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接