XQuery选择相关节点

时间:2014-06-12 19:35:37

标签: xquery xquery-sql

鉴于以下XML,检索SubscriberID为空的SubscriberStatus的SQL XQuery是什么?鉴于XML存储在具有XML数据类型的列中。

<ObjectEntry> <Key>Key1</Key> <DicValue> <ObjectEntry> <Key>SubscriberStatus</Key> <Value xsi:type="xsd:string">Active</Value> <DicValue /> </ObjectEntry> <ObjectEntry> <Key>SubscriberID</Key> <Value xsi:type="xsd:string" /> <DicValue /> </ObjectEntry> </DicValue> </ObjectEntry>

3 个答案:

答案 0 :(得分:1)

试试这个:

如果$ node保存你的xml片段,那么

  

$ node // ObjectEntry [DicValue / ObjectEntry [Key eq“SubscriberStatus”]和DicValue / ObjectEntry [Key eq“SubscriberID”] [Value ne“”]]

将返回非空SubscriberIDs

的ObjectEntry父级

答案 1 :(得分:1)

这是一个简单的XPath表达式,不需要真正的XQuery。 XPath是XQuery的一个子集。鉴于您需要SubscriberStatus的<Value/>元素,您可以获得如下所示:

//ObjectEntry/DicValue[ObjectEntry[Key = "SubscriberID"]/Value = ""]/ObjectEntry[Key = "SubscriberStatus"]/Value

这将获取所有具有空SubscriberID的ObjectEntries,然后导航到SubscriberStatus。如果您只想要实际的字符串,可以附加/string()

答案 2 :(得分:0)

感谢您的建议!不幸的是他们并没有按照我的要求行事,但确实帮助我获得了正确的语法。这是一个有效的解决方案。

select Request.query('//ObjectEntry/DicValue/ObjectEntry[Key = "SubscriberStatus"]/Value') as SubscriberStatus from RequestLog where Request.exist('//ObjectEntry/DicValue[ObjectEntry[Key = "SubscriberID" and Value = ""]]') = 1