暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

MySQL的函数和运算符 - XML 函数(2)

数据库杂货铺 2021-07-18
452
XPath 的局限性。这些函数支持的 XPath 语法目前受到以下限制:
 
● 不支持节点集到节点集的比较(例如 '/a/b[@c=@d]')
 
● 支持所有标准 XPath 比较操作符。
 
● 相对定位符表达式在根节点的上下文中解析。例如,考虑以下查询和结果:
 
    mysql> SELECT ExtractValue(
    -> '<a><b c="1">X</b><b c="2">Y</b></a>',
    -> 'a/b'
    -> ) AS result;
    +--------+
    | result |
    +--------+
    | X Y |
    +--------+
    1 row in set (0.03 sec)
    复制
     
    在本例中,定位器 a/b 解析为 /a/b
     
    也支持相对定位器。在下面的例子中,d[../@c="1"] 被解析为 /a/b[@c="1"]/d
     
      mysql> SELECT ExtractValue(
      -> '<a>
      -> <b c="1"><d>X</d></b>
      -> <b c="2"><d>X</d></b>
      -> </a>',
      -> 'a/b/d[../@c="1"]')
      -> AS result;
      +--------+
      | result |
      +--------+
      | X |
      +--------+
      1 row in set (0.00 sec)
      复制
       
      ● 不允许计算结果为标量值的表达式(包括变量引用、字面量、数字和标量函数调用)为前缀的定位器,使用它们会导致错误。
       
      ● 不支持 :: 操作符与以下节点类型组合使用:
       
      ■ axis::comment()
       
      ■ axis::text()
       
      ■ axis::processing-instructions()
       
      ■ axis::node()
       
      但是,支持名称测试(例如 axis::name  axis::*),如以下示例所示:
       
        mysql> SELECT ExtractValue('<a><b>x</b><c>y</c></a>','/a/child::b');
        +-------------------------------------------------------+
        | ExtractValue('<a><b>x</b><c>y</c></a>','/a/child::b') |
        +-------------------------------------------------------+
        | x |
        +-------------------------------------------------------+
        1 row in set (0.02 sec)

        mysql> SELECT ExtractValue('<a><b>x</b><c>y</c></a>','/a/child::*');
        +-------------------------------------------------------+
        | ExtractValue('<a><b>x</b><c>y</c></a>','/a/child::*') |
        +-------------------------------------------------------+
        | x y |
        +-------------------------------------------------------+
        1 row in set (0.01 sec)
        复制
         
        ● 在路径将引导到根元素“上面”的情况下,不支持从上到下的导航。也就是说,不能使用与给定元素祖先的后代匹配的表达式,其中当前元素的一个或多个祖先也是根元素的祖先。
         
        ● 以下 XPath 函数不受支持,或者有已知问题:
         
        ■ id()
         
        ■ lang()
         
        ■ local-name()
         
        ■ name()
         
        ■ namespace-uri()
         
        ■ normalize-space()
         
        ■ starts-with()
         
        ■ string()
         
        ■ substring-after()
         
        ■ substring-before()
         
        ■ translate()
         
        ● 不支持以下轴:
         
        ■ following-sibling
         
        ■ following
         
        ■ preceding-sibling
         
        ■ preceding
         
        作为参数传递给 ExtractValue() UpdateXML() XPath 表达式,在元素选择器中可能包含冒号字符(:),这使它们能够与使用 XML 名称空间表示法的标记一起使用。例如:
         
          mysql> SET @xml = '<a>111<b:c>222<d>333</d><e:f>444</e:f></b:c></a>';
          Query OK, 0 rows affected (0.00 sec)

          mysql> SELECT ExtractValue(@xml, '//e:f');
          +-----------------------------+
          | ExtractValue(@xml, '//e:f') |
          +-----------------------------+
          | 444 |
          +-----------------------------+
          1 row in set (0.00 sec)

          mysql> SELECT UpdateXML(@xml, '//b:c', '<g:h>555</g:h>');
          +--------------------------------------------+
          | UpdateXML(@xml, '//b:c', '<g:h>555</g:h>') |
          +--------------------------------------------+
          | <a>111<g:h>555</g:h></a> |
          +--------------------------------------------+
          1 row in set (0.00 sec)
          复制
           
          这在某些方面类似于 Apache Xalan 和其他一些解析器所允许的,而且比要求名称空间声明或使用 namespace-uri() local-name() 函数要简单得多。
           
           
           
          官方网址:
          https://dev.mysql.com/doc/refman/8.0/en/xml-functions.html
          文章转载自数据库杂货铺,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

          评论