当前位置: 首页 > 面试题库 >

MySQL更新XML属性

袁波
2023-03-14
问题内容

在数据加载中,似乎某些XML属性映射不正确,我现在正尝试纠正此问题,但在MySQL对XML列的处理方面遇到了麻烦。

我想为带有子字段(属性为’code =“ 3”’)的字段(属性为’tag =“
520”’)的所有出现的字段纠正XML属性(非值)。下面的查询返回受影响的0行,找到1行。关于如何实现这一目标的任何线索。

UPDATE biblioitems
SET marcxml = UpdateXML(marcxml,'datafield[@tag="520"]/subfield[@code="3"]',
                     'datafield[@tag="520"][@ind1="3"]/subfield[@code="a"]')
WHERE biblionumber = '220405';

为了清晰起见,包含了XML片段:

原始片段

<datafield tag="300" ind1=" " ind2=" ">
  <subfield code="f">article</subfield>
</datafield>
<datafield tag="520" ind1=" " ind2=" ">
  <subfield code="3">A description of something here</subfield>
</datafield>
<datafield tag="655" ind1=" " ind2=" ">
  <subfield code="a"></subfield>
</datafield>

结果是我想要的:

<datafield tag="300" ind1=" " ind2=" ">
  <subfield code="f">article</subfield>
</datafield>
<datafield tag="520" ind1="3" ind2=" ">
  <subfield code="a">A description of something here</subfield>
</datafield>
<datafield tag="655" ind1=" " ind2=" ">
  <subfield code="a"></subfield>
</datafield>

无法解决如何突出显示代码块中的更改(这是tag =“ 520”数据字段中的ind1属性及其关联的子字段属性)


问题答案:

第三个参数UpdateXML应该是新的XML片段,用它替换第二个参数中给定的XPath匹配的文档部分。

您可以使用ExtractValue以下命令创建XML片段:

UPDATE biblioitems
SET    marcxml = UpdateXML(marcxml,
         'datafield[@tag="520"]',
         CONCAT(
           '<datafield tag="520" ind1="a" ind2="',
              ExtractValue(marcxml, 'datafield[@tag="520"]/attribute::ind2'),
           '">',
           '  <subfield code="a">',
             ExtractValue(marcxml, 'datafield[@tag="520"]/subfield'),
           '  </subfield>',
           '</datafield>'
         )
       )
WHERE  biblionumber = 220405;

在sqlfiddle上看到它。



 类似资料:
  • 问题内容: 是否可以使用此功能更新表? 我使用REPLACE INTO TABLE my_table,但是仅添加了新行,并且没有更新现有行。 问题答案: 参见:http : //dev.mysql.com/doc/refman/5.5/en/load- xml.html 注意: REPLACE的工作方式与INSERT完全相同,不同之处在于,如果表中的旧行与PRIMARY KEY或UNIQUE索引的

  • 问题内容: 我在SQL Server 2008中有一个表,其中有一些列。这些列之一是Xml格式,我想更新一些属性。 例如,我的Xml列的名称为,它在前5行中的值如下: 我想将所有属性设置为30到40,如下所示: 问题答案: 从问题的早期版本看来,您的XML实际上位于表的不同行上。在这种情况下,您可以使用此功能。 使用表变量的工作样本。

  • 问题内容: 让我们有一个示例片段: 我不知道如何更新该属性的值。 问题答案: 在这里阅读更多有关它的信息。XML数据修改语言(XML DML)

  • 我至少读了5篇关于这方面的文章,但我似乎不明白。我有一个xml文件,它已经在浏览器的内存中,我正试图从我的数据库中更新一个文档,我已经有了该文档的文档ID。做这件事最好的方法是什么?jquery.couch.js中是否有对此的支持,因为我似乎找不到任何支持。 为了我的理智起见,我附上了一些带有硬编码值的代码: 我得到一个DOM18错误...但我使用的是一个公共服务器。思想?

  • 我必须在这个xml中设置“count”属性的值: 我想使用这样的代码(VTDXML库)使用“Foo”更改myCount值: 这样我反而获得了 那不是我的目标因为我想要的是

  • 问题内容: 作为大学修订的一部分,我试图回答以下问题: 在“员工”数据库中的表的至少一个属性上创建索引,使用MySQL“ XPLAIN”工具在其中清楚地显示收益(相对而言或恢复)和负面(相对于更新) )创建相关索引。 在第一部分中,我在 employees 表上创建了一个索引,并在索引前后使用了以下查询,以从检索的角度证明它是有益的: 该索引的作用是将访问的行从300,000减少到仅63。 现在,