gpt4 book ai didi

mysql - 当 MySQL 中有多个匹配项时更新 XML 节点

转载 作者:行者123 更新时间:2023-11-29 07:38:17 25 4
gpt4 key购买 nike

我需要从 XML 中删除节点。

我尝试使用 UpdateXML 函数。

例如删除节点C:

SELECT UpdateXML('<A><B>b_value<C>c_value1</C></B></A>', '/A/B/C', '')

结果:

'<A><B>b_value</B></A>'

但是当 XML 中有多个匹配项时,函数返回原始 xml:

SELECT UpdateXML('<A><B>b_value<C>c_value1</C><C>c_value2</C></B></A>', '/A/B/C', '') 

结果:

'<A><B>b_value<C>c_value1</C><C>c_value2</C></B></A>'

但我需要得到这样的结果:

'<A><B>b_value</B></A>'

当有多个匹配项时,我如何删除所有节点。

最佳答案

12.11 XML Functions :: UpdateXML

...

If no expression matching xpath_expr is found, or if multiple matches are found, the function returns the original xml_target XML fragment. ...

...

一个可能的解决方法是使用存储过程:

DELIMITER //

CREATE PROCEDURE `sp_update_xml`(
`xml` TEXT,
`path` TEXT
)
BEGIN
DECLARE `current_item` BIGINT UNSIGNED
DEFAULT ExtractValue(`xml`,
CONCAT('COUNT(', `path`, ')')
);
WHILE `current_item` > 0 DO
SET `xml` := UpdateXML(`xml`,
CONCAT(`path`, '[', `current_item`, ']'),
''
),
`current_item` := `current_item` - 1;
END WHILE;
SELECT `xml`;
END//

DELIMITER ;

CALL `sp_update_xml`(@`xml`, '/A/B/C');

参见 db-fiddle .

关于mysql - 当 MySQL 中有多个匹配项时更新 XML 节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47708469/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com