XPATH / XQUERY用于返回一行的所有值?

时间:2013-06-09 19:46:37

标签: xml xpath xquery

我有一个html页面,我可以像这样简化:

<div id="foo" class="bar">one</div>
<div id="foo" class="bar">two</div>
<div id="foo" class="bar">three</div>

什么是XPATH / XQUERY只返回那三个值的一行?

one
two
three

更新 到目前为止,我看到的最近解决方案是:

//div[@id='foo']/text()

如何在每个结果后添加'AND class =“bar”'和换行符?

2 个答案:

答案 0 :(得分:0)

//div[@id='foo and class='bar']/text()

请注意,您的输入不是有效的XML,因为XML必须有一个根节点。

要在单独的行上返回结果,您应该使用XPath / XQuery处理器的序列化选项。这在很大程度上取决于您使用的处理器,您没有指定。但是,您可以使用XQuery将结果与行结束字符连接起来,但这是相当丑陋和不好的做法。

for $x in //div[@id='foo and class='bar']/text()
return concat($x, '&#x000A;')

答案 1 :(得分:0)

你的HTML很简单 问题是什么是唯一标识你的“三个价值” 如果你的html中只有三个带有类栏的div,那么这样做:

//div[@class='bar']

如果文档中只有三个div,//div也会这样做。

但最好的方法是拥有独特的ID:

<div id="foo" class="bar">one</div>
<div id="foo1" class="bar">two</div>
<div id="foo2" class="bar">three</div>

比你能做的更多:

//div[@id='foo' or @id='foo1' or @id='foo2']

如果只想要文本内容,请添加text():

// div [@ id ='foo'或@ id ='foo1'或@ id ='foo2'] / text()