Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
XPath与HTMLUnit/Groovy中给定元素的相对关系?_Xpath_Groovy_Htmlunit - Fatal编程技术网

XPath与HTMLUnit/Groovy中给定元素的相对关系?

XPath与HTMLUnit/Groovy中给定元素的相对关系?,xpath,groovy,htmlunit,Xpath,Groovy,Htmlunit,我想计算相对于给定表达式的XPath表达式 元素 我在这里读到: 下面的一个语法似乎不应该起作用 斜杠或后代: 然而,似乎没有一个在HTMLUnit中起作用。非常感谢任何帮助哦 这是一个groovy脚本,顺便说一句。谢谢 米沙 谢谢你 从问题的定义来看,尚不清楚XPath表达式是相对于哪个元素计算的。假设这是文档节点,则以下XPath表达式将选择所需的节点: */*/div[@class='levelone'] html/body/div[@class='levelone']

我想计算相对于给定表达式的XPath表达式 元素

我在这里读到:

下面的一个语法似乎不应该起作用 斜杠或后代:

然而,似乎没有一个在HTMLUnit中起作用。非常感谢任何帮助哦 这是一个groovy脚本,顺便说一句。谢谢

米沙


谢谢你

从问题的定义来看,尚不清楚XPath表达式是相对于哪个元素计算的。假设这是文档节点,则以下XPath表达式将选择所需的节点:

   */*/div[@class='levelone']

   html/body/div[@class='levelone']

   descendant::div[@class='levelone']
如果在未显示的实际XML文档中存在默认名称空间,则可能会出现问题。在这种情况下,您需要用XPath宿主语言(我不懂groovy)定义/注册此名称空间,并使用相关前缀,如下所示:

   */*/x:div[@class='levelone']

   x:html/x:body/x:div[@class='levelone']

   descendant::x:div[@class='levelone']

非常感谢你。显然,我的错误是在后代后面使用了一个分号,而不是两个doh

#!/usr/bin/env groovy

import com.gargoylesoftware.htmlunit.WebClient

def html="""
<html><head><title>Test</title></head>
<body>
<div class='levelone'>
  <div class='leveltwo'>
     <div class='levelthree' />
  </div>
  <div class='leveltwo'>
     <div class='levelthree' />
     <div class='levelthree' />
  </div>
</div>

</body>
</html>
"""

def f=new File('/tmp/test.html')
if (f.exists()) {
  f.delete()
}
def fos=new FileOutputStream(f)
fos<<html

def webClient=new WebClient()
def page=webClient.getPage('file:///tmp/test.html')

def element=page.getByXPath("//div[@class='levelone']")
assert element.size()==1
element=page.getByXPath("div[@class='levelone']")
assert element.size()==0
element=page.getByXPath("/div[@class='levelone']")
assert element.size()==0
element=page.getByXPath("descendant::div[@class='levelone']")
assert element.size()==1

谢谢大家!

米沙

#!/usr/bin/env groovy

import com.gargoylesoftware.htmlunit.WebClient

def html="""
<html><head><title>Test</title></head>
<body>
<div class='levelone'>
  <div class='leveltwo'>
     <div class='levelthree' />
  </div>
  <div class='leveltwo'>
     <div class='levelthree' />
     <div class='levelthree' />
  </div>
</div>

</body>
</html>
"""

def f=new File('/tmp/test.html')
if (f.exists()) {
  f.delete()
}
def fos=new FileOutputStream(f)
fos<<html

def webClient=new WebClient()
def page=webClient.getPage('file:///tmp/test.html')

def element=page.getByXPath("//div[@class='levelone']")
assert element.size()==1
element=page.getByXPath("div[@class='levelone']")
assert element.size()==0
element=page.getByXPath("/div[@class='levelone']")
assert element.size()==0
element=page.getByXPath("descendant::div[@class='levelone']")
assert element.size()==1