Xpath查询在Java/groovy中意外返回0,可在其他解释器中使用

Xpath查询在Java/groovy中意外返回0,可在其他解释器中使用,java,xml,xpath,groovy,cucumber,Java,Xml,Xpath,Groovy,Cucumber,我试图在Groovy中创建一个Cucumber步骤定义,该定义通过强制的“url”标记的值在XML文档(Solr搜索结果)中查找某个节点,并返回该节点在结果列表中的位置 这是我的设想: Given I seach for "pris" Then I should see this link in the results: "/7292/pris-forbruk-og-inntekt" Then I will see the position of this url: "/

我试图在Groovy中创建一个Cucumber步骤定义,该定义通过强制的“url”标记的值在XML文档(Solr搜索结果)中查找某个节点,并返回该节点在结果列表中的位置

这是我的设想:

    Given I seach for "pris"
    Then I should see this link in the results: "/7292/pris-forbruk-og-inntekt"
    Then I will see the position of this url: "/7292/pris-forbruk-og-inntekt"
这是我的步骤定义:

Then(~'^I should see this link in the results: "([^"]*)"$') { String tekst ->
assertThat(browser.getPageSource(), containsString(tekst))
}

Then(~'^I will see the position of this url: "([^"]*)"$') { String text -> 

    pageSource = browser.getPageSource()

    //Prints the position of the relevant search result
    def xpathString = "count(/response/result/doc/str[.='" + text + "']/parent::*/preceding-sibling::*)"  //+1

    builder = DocumentBuilderFactory.newInstance().newDocumentBuilder()
    doc = builder.parse(new InputSource(new ByteArrayInputStream(pageSource.getBytes("utf-8"))))
    expr = XPathFactory.newInstance().newXPath().compile(xpathString)
    posisjon = expr.evaluate(doc)
    println "The position of this result is: " + posisjon.toString()
    println xpathString

}
两个测试都返回一个绿色的cuke,因此我知道字符串在XML中找到。 下面是我正在评估的XML结果的一个示例:

<response>
    <lst name="responseHeader">
        <int name="status">0</int>
        <int name="QTime">75</int>
        <lst name="params">
            <str name="indent">true</str>
            <str name="q">pris</str>
            <str name="wt">xml</str>
        </lst>
    </lst>
    <result name="response" numFound="306" start="0">
        <doc>
            <str name="url">/nasjonalregnskap/nokkeltall/priser-og-prisindekser</str>
            <str name="id">3730</str>
            <str name="tittel">Priser og prisindekser</str>
            <str name="innholdstype">nokkeltallsside</str>
            <date name="publiseringsdato">2010-11-23T11:35:00Z</date>
            <str name="hovedemner">Nasjonalregnskap</str>
            <str name="sprak">no</str>
            <str name="rom">statistikk</str>
        </doc>
        <doc>
            <str name="url">/7292/pris-forbruk-og-inntekt</str>
            <str name="id">7292</str>
            <str name="tittel">Pris, forbruk og inntekt</str>
            <str name="innholdstype">publikasjon</str>
            <date name="publiseringsdato">2002-06-13T10:00:00Z</date>
            <str name="hovedemner">Befolkning</str>
            <str name="sprak">no</str>
            <str name="rom">statistikk</str>
        </doc>
    </result>
</response>
然而,当我对Altova XMLspy中完全相同的XML文档计算这个Xpath查询时,我得到了预期的结果

显然我没有足够的声誉(对不起,对不起…)来发布图片,这里有一个链接到


因此,我无法解决的问题是:JavaXPathFactory对xpath的评估是否与其他解释器不同?我在执行过程中是否犯了错误?我想不出答案:)

最终找到了答案。我可能是在实现XPathFactory。以错误的方式进行评估

无论哪种方式,我最终都使用了Gpath,这是我用来返回正确结果的代码,以防将来有人提出类似的请求:

String pageSource = browser.getPageSource()

 def stream = new XmlSlurper().parseText(pageSource)
 List test = stream.depthFirst().findAll {it.@name=="url"}
 def pos = test.findIndexOf { it.toString().contains(tekst) } + 1

println pos

告诉未来我说你好;)

根据XML文件,查询应返回0。否则,它不是真正的输入XML。我省略了太多的XML,我正在处理的文件有更多的点击率和相关信息。我编辑了我的提交,在我的系统上进行了测试,它仍然给出了相同的结果。我的问题现在清楚了吗?
String pageSource = browser.getPageSource()

 def stream = new XmlSlurper().parseText(pageSource)
 List test = stream.depthFirst().findAll {it.@name=="url"}
 def pos = test.findIndexOf { it.toString().contains(tekst) } + 1

println pos