【问题标题】:XPATH/XQUERY for returning all the values one for line?XPATH/XQUERY 用于返回行的所有值?
【发布时间】:2013-06-09 19:46:36
【问题描述】:

我有一个 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"' 和换行符?

【问题讨论】:

  • 这里缺少很多东西!
  • 不清楚你在问什么。您将 HTML 页面简化为什么?你想得到什么结果?请改进您的问题。
  • 抱歉,我没有在代码行之前放置 4 个空格,所以 Stackoverflow 隐藏了标签和行返回。现已更正。

标签: xml xpath xquery


【解决方案1】:

您的 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' or @id='foo1' or @id='foo2']/text()

【讨论】:

    【解决方案2】:
    //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;')
    

    【讨论】:

    • 我在问题的底部添加了一个“更新”,你能看一下吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-16
    • 2015-09-29
    • 2015-06-17
    • 1970-01-01
    • 1970-01-01
    • 2021-07-28
    • 1970-01-01
    相关资源
    最近更新 更多