1

这与此MySQL 更新 XML 属性有些相关,但这次我想更新节点值。我在 marcxml 列中有以下 XMLfragment:

<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 作为主键(但我想这无关紧要)并且它具有存储 xml 的 marcxml 列。查询给了我“0 行受影响”。所以它似乎不起作用。

在此先感谢和欢呼!

4

1 回答 1

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';
于 2015-10-06T09:01:17.110 回答