如何防止Xpath递归

时间:2018-04-10 19:54:28

标签: xpath

鉴于我有这个(未知的)文档结构,如何编写xpath来选择div1和div2,即所有div,但不是递归(没有div,包含在另一个div中的任何地方)?

我找不到任何可以指向这个方向的文档,我可以管理的是选择所有div,即div1,div2和div3(带//div表达式),但我想排除div2在这里,因为它是另一个人的后裔。

(我需要一个通用的解决方案来选择不递归的标签,这里的ID仅用于说明目的。)

  ...some unknown structure with no divs...
  <div id="1">
    ...some unknown structure with no divs...
    <div id="2"></div>
    ...some unknown structure with no divs...
  </div>
  ...some unknown structure with no divs...
  <div id="3"></div>
  ...some unknown structure with no divs...

1 个答案:

答案 0 :(得分:2)

如果您选择 str +=pars[i].name+strn(p[i],format='('+pars[i].sformat+')') ^ % Syntax error. At: /home/behzad/schwmodfirstiter_box.pro, Line 5 % 1 Compilation error(s) in module SCHMAKEPARSTRING. str +=pars[i].name+strn(p[i],format='('+pars[i].sformat+')') ^ % Syntax error. At: /home/behzad/schwmodfirstiter_box.pro, Line 14 % 1 Compilation error(s) in module SCHMAKEPARSTRING0. mlstr=pars[0].name+strn(ml[k],format='('+pars[0].sformat+')')+'/' ^ % Syntax error. At: /home/behzad/schwmodfirstiter_box.pro, Line 63 % 1 Compilation error(s) in module SCHMAKEMODEL. % Compiled module: SUBMITORBLIB. % Compiled module: COMPILENNLS. % Compiled module: SCHWMODFIRSTITER. ,则选择所有//div[not(ancestor::div)]个没有祖先的元素也是div

如果您有权访问XPath 3.1或3.0,您还可以使用div函数https://www.w3.org/TR/xpath-functions/#func-outermost,因为它“返回序列中没有序列中的另一个节点作为祖先的每个节点”所以“表达式outermost返回那些未包含在其他div元素中的div元素”。