【问题标题】:extract value from xml in mysql从mysql中的xml中提取值
【发布时间】:2013-05-10 05:44:13
【问题描述】:

我正在尝试从 xml 中提取值。当 xml 具有属性时,我遇到了问题。 像下面的存储过程

DELIMITER $$
DROP PROCEDURE IF EXISTS `excel`.`insert_items` $$
CREATE DEFINER=`root`@`localhost` PROCEDURE `insert_items`()
BEGIN
SET @xml = '<items><item>
        <value columntype="0">Single Line Text_01</value>
    <value columntype="1">Single Line Text_12341</value>
    <value columntype="2">Single Line Text_21</value>
    <value columntype="3">Single Line Text_31</value>
    <value columntype="4">Single Line Text_41</value>
    </item>
</items>';
SELECT @columntype, ExtractValue(@xml, 'items/item/value[items/item/value/@columntype=0]');    
END $$
DELIMITER ;

【问题讨论】:

  • 这里提取有什么问题?

标签: mysql xml


【解决方案1】:

获取属性为columntype="0"的元素的值

SELECT ExtractValue(@xml, 'items/item/value[@columntype=0]') value;

输出:

|               VALUE |
-----------------------
| Single Line Text_01 |

SQLFiddle

【讨论】:

  • 如果我有这个 XML:&lt;items&gt; &lt;item&gt; &lt;value1&gt;Single Line Text_01&lt;/value&gt; &lt;value2&gt;Single Line Text_12341&lt;/value&gt; &lt;value3&gt;Single Line Text_21&lt;/value&gt; &lt;value4&gt;Single Line Text_31&lt;/value&gt; &lt;value5&gt;Single Line Text_41&lt;/value&gt; &lt;/item&gt; &lt;/items&gt; 在这种情况下如何单独提取值?
【解决方案2】:

以下代码将打印 columntypevalue 的值:

 DELIMITER $$
    DROP PROCEDURE IF EXISTS `TEST`$$
    CREATE DEFINER=`root`@`localhost` PROCEDURE `TEST`(IN XMLINPUT TEXT)
    BEGIN
    DECLARE VALUECOUNT INT UNSIGNED;
    DECLARE VALUE INT UNSIGNED;
    DECLARE I INT UNSIGNED DEFAULT 1;
    SET VALUECOUNT:=EXTRACTVALUE(XMLINPUT, 'COUNT(/items/item/value)');
    SELECT VALUECOUNT; -- print 5
    WHILE (I <= VALUECOUNT) DO 
        SELECT EXTRACTVALUE(XMLINPUT, '/items/item/value[$I]/@columntype[1]'); -- will print columntype tag
        SELECT EXTRACTVALUE(XMLINPUT, '/items/item/value[$I]'); -- will print value tag     
    SET I:= I+1;
    END WHILE;

    END$$DELIMITER ;

【讨论】:

    猜你喜欢
    • 2013-02-15
    • 2018-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-27
    • 1970-01-01
    相关资源
    最近更新 更多