我无法在xpath中找出两个表达式。有人可以帮忙吗?
他们在这里
substring-after(substring-before(//ul[@id='biblio']/li[3], ']', '['))
//h2[normalize-space(string())='name']/preceding::h1[1]
答案 0 :(得分:0)
你的第一个表达:
substring-after(substring-before(//ul[@id='biblio']/li[3], ']', '['))
首先,这可能会找到所有ul
个元素,这些元素位于XPath上下文的(self)或后代。这些必须具有id
属性,其值为' biblio'我匹配,从那里它将找到匹配的li
元素中的第3个ul
子元素。
然后,它会在将text()
元素置于字符串后,在li
元素的li
上执行子字符串函数。
例如,匹配的hello [world]
元素的文字是world
。结果只有<div>
<ul id="biblio">
<li>thing [one]</li>
<li>thing [two]</li>
<li>thing [three]</li>
</ul>
<ul id="biblio">
<li>other [a]</li>
<li>other [b]</li>
<li>other [c]</li>
</ul>
</div>
。作为更完整的示例,给出XML输入:
three
作为XPath表达式的结果,您将获得两个字符串的序列,即c
和<div>
。请注意,在示例输入中使用//h2[normalize-space(string())='name']/preceding::h1[1]
只是一个容器,可以是任何元素。
你的第二个表达:
h2
首先,这可能会找到所有text()
元素,这些元素位于XPath上下文的(self)或后代。它们必须具有name
,当它被认为是一个字符串等于h1
时。然后从那里选择前一个<div>
<h1>title1</h1>
<p>stuff</p>
<h1>title2</h1>
<p>more stuff</p>
<h2>name</h2>
<p>other stuff</p>
</div>
。
例如,给定XML输入:
<h1>title2</h1>
由于XPath表达式,您将获得以下XML输出:
{{1}}
希望能帮助您理解......