Xpath в Query для поиска всех дочерних узлов - PullRequest
0 голосов
/ 28 декабря 2018

Я использую 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 голосов
/ 28 декабря 2018

Поскольку вам нужно только проверить, существует ли элемент author с определенным значением в столбце XML в вашем предложении where, тогда лучше подойдет XMLEXISTS():

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

демо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...