代码之家  ›  专栏  ›  技术社区  ›  Stefan Kendall

xpath表达式不返回//元素的任何值,但//*返回一个计数

  •  4
  • Stefan Kendall  · 技术社区  · 15 年前

    我将XOM与以下示例数据一起使用:

    Element root = cleanDoc.getRootElement();
    //find all the bold elements, as those mark institution and clinic.
    Nodes nodes = root.query("//*");
    
    <html xmlns="http://www.w3.org/1999/xhtml" xmlns:html="http://www.w3.org/1999/xhtml">
        <head>
            <title>Patient Information</title>
        </head>
    </html>
    

    以下元素返回许多元素(来自真实数据):

    //*
    

    但是有点像

    //head
    

    什么也不返回。如果我遍历根的子元素,那么这些数字似乎是匹配的,如果我打印元素名,那么一切看起来都是正确的。

    我将使用HTML,用tagsoup解析它,然后从生成的字符串构建一个XOM文档。这其中的哪一部分会如此严重地出错?我觉得这里有一些奇怪的编码问题,但我没有看到。Java字符串是字符串,对吗?

    1 回复  |  直到 15 年前
        1
  •  6
  •   Lachlan Roche    15 年前

    您的文档有一个默认的名称空间,这意味着在xpath模型中,所有元素都在该名称空间中。

    查询应该是 //html:head . 必须提供到xpath查询的命名空间映射。

    注意,虽然xpath表达式使用名称空间前缀,但必须匹配的是名称空间URI。

    XPathContext ctx = new XPathContext("html", "http://www.w3.org/1999/xhtml");
    Nodes nodes = root.query("//html:head", ctx );
    
    推荐文章