查询中的Xpath以搜索所有子节点

时间:2018-12-28 07:00:36

标签: sql xml postgresql xpath

我正在使用postgres。我的数据是xml格式。我想写一个查询来获取匹配的记录。该记录可能在任何子元素中。我需要在查询中使用XPath的结果。

样本数据:

<book category="Cooking">
          <title lang="en">XQuery Kick Start</title>
          <author>Leonard Richardson</author>
          <author>Sam Ruby</author>
          <year>2007</year>
          <price>58.33</price>
</book>

查询1:

SELECT id, xmldata
FROM tblprofile AS a
WHERE 'Sam Ruby' = CAST((xpath('/book/author/text()', xmldata))[1] AS TEXT)

这没有获取任何结果。

查询2:

SELECT id, xmldata
FROM tblprofile AS a
WHERE 'Leonard Richardson' = CAST((xpath('/book/author/text()', xmldata))[1] AS TEXT)

获取结果,因为上述查询与第一个条目匹配。如何使查询1工作?如何在所有子节点中搜索?

1 个答案:

答案 0 :(得分:1)

由于只需要检查where子句的XML列中是否存在具有特定值的author元素,因此XMLEXISTS()会更合适:

SELECT id, xmldata FROM tblprofile AS a 
WHERE  XMLEXISTS('/book/author[.="Sam Ruby"]' PASSING a.xmldata)

demo