PostgreSQL xpath与双引号匹配

时间:2016-05-09 06:37:59

标签: sql xml postgresql xpath escaping

我在PostgresSQL 9.3中使用xpath来搜索包含双引号内容的节点。 我试图用“\”“和”& quo t;“替换”“”,但它们都没有奏效。 “concat”似乎也不起作用。我在互联网上找不到一种工作方法。谁能告诉我如何逃避双引号。

查询:

select
    xpath(E'//book[title = "["a book"]"]/price/text()', xmlparse(document b.content))::text[]
from
    booksite b

XML内容如:

<book>
  <title>["a book"]</title>
  <price>29.99</price>
</book>

2 个答案:

答案 0 :(得分:0)

XPath 1.0无法转义引号。使用单引号作为XPath字符串分隔符,因为您可以通过将它们加倍来转义SQL中的单引号:

select
    xpath(E'//book[title = ''["a book"]'']/price/text()', xmlparse(document b.content))::text[]
from
    booksite b

答案 1 :(得分:0)

您可以使用$$ aka Dollar-quoted String Constants

select
    xpath( $$//book[title = '["a book"]' ]/price/text() $$ ,
           xmlparse(document b.content))::text[]
from booksite b;

SqlFiddleDemo

输出:

╔═══════╗
║ xpath ║
╠═══════╣
║ 29.99 ║
╚═══════╝