
<?xml version="1.0" ?><response><status>ERROR_MISSING_DATA</status><responseType>COUNTRY_MISSING</responseType><country_info>USA</country_info><phone_country_code>1234</phone_country_code></response>
所以我的表格结构是这样的
Column | Type | ModifIErs -------------+-----------------------------+---------------------------------------------------------- ID | bigint | not null default nextval('events_ID_seq'::regclass) hostname | text | not null time | timestamp without time zone | not null trn_type | text | db_ret_code | text | request | text | response | text | wait_time | text | 我想从每一个请求中提取状态.我该怎么做?
下面是一个示例行.并假设表名为abc_events
ID | 1870667hostname | abcd.localtime | 2013-04-16 00:00:23.861trn_type | Arequest | <?xml version="1.0" ?><response><status>ERROR_MISSING_DATA</status><responseType>COUNTRY_MISSING</responseType><country_info>USA</country_info><phone_country_code>1234</phone_country_code></response>response | <?xml version="1.0" ?><response><status>ERROR_MISSING_DATA</status><responseType>COUNTRY_MISSING</responseType><country_info>USA</country_info><phone_country_code>1234</phone_country_code></response>使用
xpath()功能: WITH x(col) AS (SELECT '<?xml version="1.0" ?><response><status>ERROR_MISSING_DATA</status></response>'::xml)SELECT xpath('./status/text()',col) AS statusFROM x / text()剥离周围的< status>标签.
在这种情况下,使用单个元素返回一个xml数组:
statusxml[]-------{ERROR_MISSING_DATA} 适用于你的桌子
为了回应您的问题更新,这可以简单地是:
SELECT ID,xpath('./status/text()',response::xml) AS statusFROM tbl; 如果您确定每行只有一个状态标签,您可以简单地从数组中提取第一个项目:
SELECT ID,(xpath('./status/text()',response::xml))[1] AS statusFROM tbl; 如果可以有多个状态项:
SELECT ID,unnest(xpath('./status/text()',response::xml)) AS statusFROM tbl; 获取每个ID为1-n行.
投射到xml
由于您将列定义为文本类型(而不是xml),因此您需要显式转换为xml.xpath()函数需要xml类型的第2个参数,一个无类型的字符串常量被自动强制为xml,而文本列不是,你需要明确地施放.
这没有明确的演示:
SELECT xpath('./status/text()','<?xml version="1.0" ?><response><status>SUCCESS</status></response>') 像我第一个例子中的CTE需要一个类型为“common table Expression”中的每一列.如果我没有转换为特定类型,那么将使用未知的类型 – 这与无类型的字符串不同.显然,未知和xml之间没有直接的转换.你必须先转换为文本:unkNown_type_col :: text :: xml.更好地投射到:: xml马上.
这已经被Postgresql 9.1收紧了(我想).旧版本更容易.
无论哪种方式,使用任何这些方法,字符串必须是有效的xml或cast(隐式或显式)将引发异常.
总结以上是内存溢出为你收集整理的在PostgreSQL中提取xml标签的值全部内容,希望文章能够帮你解决在PostgreSQL中提取xml标签的值所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)