java - 使用 XPath 读取站点地图

标签 java xml xpath

我想使用 XPath 读取站点地图,但它不起作用。 这是我的代码:

private void evaluate2(String src){
    DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
    factory.setNamespaceAware(true); 
    try{
        DocumentBuilder builder = factory.newDocumentBuilder();
        Document doc = builder.parse(new ByteArrayInputStream(src.getBytes()));

        System.out.println(src);

        XPathFactory xp_factory = XPathFactory.newInstance();

        XPath xpath = xp_factory.newXPath();

        XPathExpression expr = xpath.compile("//url/loc");

        Object result = expr.evaluate(doc, XPathConstants.NODESET);


        NodeList nodes = (NodeList) result;

        System.out.println(nodes.getLength());


        for (int i = 0; i < nodes.getLength(); i++) {
            items.add(nodes.item(i).getNodeValue());
            System.out.println(nodes.item(i).toString()); 
        }         
    }catch(Exception e){
        System.out.println(e.getMessage());
    }
}

在我检索站点地图的远程源之前,它通过变量 src 传递给evaluate2。 并且 System.out.println(nodes.getLength()); 显示 0 我的 xpath 查询正在工作,因为该查询在 PHP 中工作。 您看到我的代码中有错误吗?

谢谢

最佳答案

您使用命名空间感知解析器解析站点地图(这就是 factory.setNamespaceAware(true) 所做的),但随后尝试使用不使用命名空间解析器(或引用)的 XPath 来访问它任何命名空间)。

最简单的解决方案是将解析器配置为不支持命名空间。只要您只是解析一个独立的站点地图,这就不成问题。

代码中的另一个问题是您将站点地图内容作为字符串传递,然后使用平台默认编码转换该字符串。只要您的平台默认编码与您从服务器检索的实际字节匹配(假设您也使用平台默认编码创建了字符串),此操作就有效。如果没有,您可能会遇到转换错误。

关于java - 使用 XPath 读取站点地图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13977878/

相关文章:

java - 使用 JFreeChart 创建正态分布图

R 中的 XML 包 - readHTMLTable 和多行类

Python - 全局名称未定义

java - 基于角色的身份验证不起作用

java - 使用 Apache HTTP Client 时如何设置 EnabledCipherSuites?

c# - XML 序列化在 null 或空值上强制完全结束标记

java - getElementsByTagName 向下搜索所有级别的 XML 节点

java - 使用appium单击java中某个元素旁边的元素

java - Spring : IdempotentReceiverInterceptor can only be used on MessageHandlers?

java - 从 Java 创建 .BPMN2.0.xml