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>
而且我不明白如何检索这些数据?
最佳答案
标签<content:encoded>
表示名称为 encoded
的元素在前缀为 content
的 XML 命名空间中. XPath 求值器可能无法解析 content
它的命名空间的前缀,我认为是 http://purl.org/rss/1.0/modules/content/
来自快速谷歌。
要解决它,您需要执行以下操作:
- 确保您的 DocumentBuilderFactory 有
setNamespaceAware( true )
在构造之后调用它,否则在解析期间所有 namespace 都将被丢弃。 - 编写
javax.xml.namespace.NamespaceContext
的实现将前缀解析为其命名空间 ( doc )。 - 调用
XPath#setNamespaceContext()
与您的实现。
关于java - 从 Wordpress 提要中解析 Java 中的 XML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7668658/