2015-10-05 2 views
1

Это несколько связано с этим MySQL to update an XML attribute, но на этот раз я хочу обновить значение узла. У меня есть следующий XMLfragment, который находится в колонке marcxml:MySQL для обновления значения узла XML

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

Я хочу обновить тег значение 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 строк, затронутых». так что кажется, что это не сработает.

Спасибо заранее и приветствую!

+0

Итак ... это ваш запрос не работает, как написано, или ...? –

+0

Это не работает, это дает мне «0 строк, затронутых». – schnydszch

+0

Мне показалось, что это сработало, я проверил с другой записью, я не знаю, что это просто странно: UPDATE auth_header SET marcxml = UpdateXML (marcxml, '// controlfield [@ tag = "001"]', CONCAT (' ',' 10 ',' ')) WHERE Extractvalue (marcxml,' // controlfield [@ tag = "001"] ') =' 169625 '; – schnydszch

ответ

0

Глядя на обсуждение здесь MySQL to update an XML attribute и 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 является // управляющим полем [@ tag = "001"] ', который является узлом, который нуждается в редактировании. New_xml - concat, желаемая цифра и оператор закрытия. И, наконец, выражение 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';