我试图获取NULL值,但输出始终为空,我不知道是否与mysql配置有关,
查询;
mysql> SELECT ExtractValue('
<?xml version="1.0" encoding="UTF-8"?>
<lista>
<socios>
<inscripcion xsi:nil="true"></inscripcion>
</socios>
</lista>','lista/socios/inscripcion') as value;
+-------+
| value |
+-------+
| |
+-------+
1 row in set (0.00 sec)
mysql> SELECT ExtractValue('
<?xml version="1.0" encoding="UTF-8"?>
<lista>
<socios>
<inscripcion xsi:nil="true" />
</socios>
</lista>','lista/socios/inscripcion') as value;
+-------+
| value |
+-------+
| |
+-------+
1 row in set (0.00 sec)
mysql Ver 14.14使用readline 6.2为debian-linux-gnu(x86_64)分发5.5.37
连接ID:53 当前数据库: 当前用户:root @ localhost SSL:未使用 当前寻呼机:stdout 使用outfile:&#39;&#39; 使用分隔符:; 服务器版本:5.5.37-0 + wheezy1(Debian) 协议版本:10 连接:通过UNIX套接字的Localhost 服务器characterset:latin1 Db characterset:latin1 客户端字符集:utf8 Conn。characterset:utf8 UNIX套接字:/var/run/mysqld/mysqld.sock 正常运行时间:2小时21分33秒
答案 0 :(得分:0)
根据MySQL XML Functions Documentation
:
如果没有为表达式找到匹配的文本节点(包括隐式/
text()
) - 无论出于何种原因,只要xpath_expr
有效,xml_frag
由哪些元素组成正确嵌套和关闭 - 返回一个空字符串。没有区分空元素的匹配和根本没有匹配。这是设计的。
但是,您可以使用以下内容确定是否存在匹配元素:
SELECT ExtractValue('
<?xml version="1.0" encoding="UTF-8"?>
<lista>
<socios>
<inscripcion xsi:nil="true"></inscripcion>
</socios>
</lista>', 'count(lista/socios/inscripcion)') as value;
输出将是:
+-------+
| value |
+-------+
| 1 |
+-------+
修改1 :
得到相同的输出,我根本得不到它。我应该如何强制获取NULL值?
如果返回的(修剪过的)字符串的长度为零,那么您可以显式返回NULL
。
示例:
SELECT if( length( trim( @v:=ExtractValue( '
<?xml version="1.0" encoding="UTF-8"?>
<lista>
<socios>
<inscripcion xsi:nil="true"> </inscripcion>
</socios>
</lista>', '/lista/socios/inscripcion' ) ) ) = 0, NULL, @v ) as value;
+-------+
| value |
+-------+
| NULL |
+-------+
如果返回只包含空格的字符串,则可以使用trim
删除。