XPath'contains()'需要单例(或空序列)

布赖恩·迪克曼

鉴于XML:

<Dial>
    <DialID>
        24521
    </DialID>
    <DialName>
        Base Price
    </DialName>
</Dial>
<Dial>
    <DialID>
        24528
    </DialID>
    <DialName>
        Rush Options
    </DialName>
    <DialValue>
        1.5
    </DialValue>
</Dial>
<Dial>
    <DialID>
        24530
    </DialID>
    <DialName>
        Bill Rush Charges
    </DialName>
    <DialValue>
        School
    </DialValue>
</Dial>

我可以在xpath中使用contains()函数:

//Dial[DialName[contains(text(), 'Bill')]]/DialValue

要检索我想要的值:

School

上面的XML存储在SQL数据库的一个字段中,因此我正在使用.value方法从该字段中进行选择。

SELECT Dials.DialDetail.value('(//Dial[DialName[contains(text(), "Bill")]]/DialValue)[1]','VARCHAR(64)') AS BillTo
FROM CampaignDials Dials

我似乎似乎语法不正确... xpath可以按预期工作(在Oxygen和其他地方进行了测试),但是当我在.value()方法的XQuery参数中使用它时,出现了一个错误:

Started executing query at Line 1
Msg 2389, Level 16, State 1, Line 36
XQuery [Dials.DialDetail.value()]: 'contains()' requires a singleton (or empty sequence), found operand of type 'xdt:untypedAtomic *'
Total execution time: 00:00:00.004

我尝试了单引号和双引号的不同变体,但没有任何效果。该错误是针对属性的XPath数据类型,但我没有检索属性;我正在获取文本值。如果我用// Dial [DialName [contains(text(),'Bill')]] / DialValue / text()代替键入响应,则会收到相同的错误。

在方法中使用contains()XQuery的正确方法是什么XML.value()还是这是错误的方法?

查理菲斯

您几乎是正确的,您只需要[1]text()函数上保证单个值即可。

text()由于性能原因,您还应该在要拔出的实际节点上使用

另外,//它效率低下,因此仅在确实需要递归下降时才使用它。您可以改用/*/获取任何名称的第一个节点。

SELECT
    Dials.DialDetail.value(
        '(//Dial[DialName[contains(text()[1], "Bill")]]/DialValue/text())[1]',
        'VARCHAR(64)') AS BillTo
FROM CampaignDials Dials

正如Yitzhak Kabinsky指出的那样,这仅使表的每一行为您提供一个值,.nodes如果您想将XML本身切成行,则需要这样做

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用 XPath contains with querySelectorAll

来自分类Dev

XPath contains()有条件吗?

来自分类Dev

是否可以在Xpath中合并contains()函数?

来自分类Dev

Selenium / getElements通过XPATH和CONTAINS(JAVA)

来自分类Dev

'local-name()'需要单例(或空序列)T-SQL Xquery

来自分类Dev

XPath // div [contains(text(),'string')]无法选择包含'string'的div

来自分类Dev

XPATH 找不到网络上包含的文本 - 使用 contains(text())

来自分类Dev

XQuery [value()]:'value()'需要一个单例(或空序列),找到类型为'xdt:untypedAtomic *'的操作数

来自分类Dev

序列(XPath 2.0)vs nodeSet(XPath 1.0)

来自分类Dev

需要解释XPath语法

来自分类Dev

需要XPath结尾功能

来自分类Dev

需要Python XPath帮助

来自分类Dev

HTML标记需要XPATH

来自分类Dev

需要 HTMLAgilityPack xpath

来自分类Dev

Xpath导致空变量

来自分类Dev

XPath获取空列表

来自分类Dev

如何在XPath中使用starts-with(),contains()和ends-with()查找xml节点的内部文本?在XPATH 1.0中

来自分类Dev

需要某些xPath搜索模式

来自分类Dev

Scrapy Xpath输出为空

来自分类Dev

XML,xpath为空结果

来自分类Dev

XPath PHP 解析问题 - 空

来自分类Dev

在CasperJS的XPath表达式中使用contains(text(),“ string”)时如何使用ignorecase?

来自分类Dev

xpath中是否有一个以/ contains开始的功能来搜索节点名称

来自分类Dev

XPath:处理contains()函数的无效第二个参数

来自分类Dev

在contains()找到序列的地方找到字符索引

来自分类Dev

在contains()找到序列的地方查找char索引

来自分类Dev

XPath功能序列化节点?

来自分类Dev

XPATH/Xquery 导航字符串序列

来自分类Dev

需要 lxml xpath 表达式帮助

Related 相关文章

热门标签

归档