MySQL来更新XML节点值



这与更新XML属性的MySQL有点关系,但这次我想更新节点值。我有以下XMLfragment,这是在marcxml列:

<leader>00227nz  a2200109n  4500</leader>
<controlfield tag="001">1</controlfield>
   ...
<controlfield tag="005">20091210091717.0</controlfield>
        ...

我想更新控制字段值标签001,使其成为基于查询的数字。像这样:

<leader>00227nz  a2200109n  4500</leader>
<controlfield tag="001">10</controlfield>
   ...
<controlfield tag="005">20091210091717.0</controlfield>
        ...

我最初有以下mysql查询:

UPDATE auth_header SET marcxml = UpdateXML(marcxml, '//controlfield[@tag="001"]', CONCAT('<controlfield tag="001">', '10', '</controlfield>')) WHERE Extractvalue(marcxml, '//controlfield[@tag="001"]') ='169625';

表是auth_header,它有authid为主键(但我想这无关紧要),它有marcxml列,其中存储xml。查询显示受影响的行数为0。

提前感谢和干杯!

查看这里MySQL更新XML属性和MySQL站点https://dev.mysql.com/doc/refman/5.1/en/xml-functions.html#function_updatexml的讨论,查询:

UpdateXML(xml_target, xpath_expr, new_xml)

应该可以。

这个问题的xml_target是marcxml。xpath_expr是'//controlfield[@tag="001"]',这是需要编辑的节点。new_xml用于连接所需的数字和结束语句。最后,where表达式也与上面的xpath表达式相同。

因此

:

UPDATE auth_header SET marcxml = UpdateXML(marcxml, '//controlfield[@tag="001"]', CONCAT('<controlfield tag="001">', '10', '</controlfield>' )) WHERE Extractvalue(marcxml, '//controlfield[@tag="001"]') ='169625';

相关内容

  • 没有找到相关文章

最新更新