天道酬勤,学无止境

Dynamically replacing the value of a node in XML DML

I am struggling with this now: How do you replace the value of a node in an untyped XML column where the text is equal to a certain variable value? Is it possible?

My XML:

<attrs>
  <attr>ManualInsert</attr>
  <attr>ManualInsert2</attr>
  <attr>ManualInsert4</attr>
  <attr>ManualInsert8</attr>
</attrs>

My Tries:

DECLARE @OldValue Varchar(255) =  'ManualInsert'
DECLARE @NewValue Varchar(255) =  'ReplacedValue'

UPDATE
    Labels
SET
    Attributes.modify('replace value of (/attrs/attr/text())[1]
                       with
                       if ((/attrs/attr/text() = sql:variable("@OldValue")))
                       then sql:variable("@NewValue")
                       else () ')
WHERE
    Id = 2000046

message: (0 row(s) affected)

DECLARE @OldValue Varchar(255) =  'ManualInsert'
DECLARE @NewValue Varchar(255) =  'ReplacedValue'

UPDATE
    Labels
SET
    Attributes.modify('replace value of (/attrs/attr[text() = sql:variable("@OldValue")])[1]
                       with sql:variable("@NewValue")')
WHERE
    Id = 2000046

message:

Msg 2356, Level 16, State 1, Line 7
XQuery [Labels.Attributes.modify()]: The target of 'replace value of' must be a non-metadata attribute or an element with simple typed content, found 'element(attr,xdt:untyped) ?'

expected result:

<attrs>
  <attr>ReplacedValue</attr>
  <attr>ManualInsert2</attr>
  <attr>ManualInsert4</attr>
  <attr>ManualInsert8</attr>
</attrs>

评论

modify('replace value of (/attrs/attr[. = sql:variable("@OldValue")]/text())[1]
        with sql:variable("@NewValue")')

Your second attempt is actually just missing to specify that it is the text() that should be replaced. This will also work.

modify('replace value of (/attrs/attr[text() = sql:variable("@OldValue")]/text())[1]
        with sql:variable("@NewValue")')

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • Java动态修改未知JSON的JsonNode(Modify JsonNode of unknown JSON dynamically in Java)
    问题 我正在尝试修改一个 JSON(结构未知),其中 JsonPath 及其等效的 XML Xpath 是我已知的。 我已经厌倦了使用com.jayway.jsonpath.JsonPath库。 JsonPath 的问题是,它返回值但我无法修改目标节点。 以下是我的代码片段 JsonPath.read(jsonFile, jsonPath); JsonPath.parse(jsonPath); System.out.println("Author: "+JsonPath.read(jsonFile, jsonPath)); 我尝试使用之前问过的问题中提到的杰克逊,但它需要按如下方式逐个节点遍历 ((ObjectNode) parent).put(fieldName, newValue); 由于未知的结构,我无法做到这一点。 我已经尝试了递归解析 JSON 对象问题的答案,但它说明了如何解析而不是修改 我需要做以下事情 JsonNode root = mapper.readTree("Json in form of String"); ((JsonNode)(root.get("JsonPath")).set("New Value"); 有什么方法可以实现吗? 回答1 JsonNode对象是不可变的,因此您无法修改它们。 你可以做的是用另一个替换一个JsonNode 。
  • 如何在SQL中使用IF / ELSE语句更新或创建新的xml节点条目(How to use IF/ELSE statement to update or create new xml node entry in Sql)
    问题 例子: <root> <StartOne> <Value1>Lopez, Michelle MD</Value1> <Value2>Spanish</Value2> <Value3> <a title="49 west point" href="myloc.aspx?id=56" target="_blank">49 west point</a> </Value3> <Value4>908-783-0909</Value4> <Value5> <a title="CM" href="myspec.aspx?id=78" target="_blank">CM</a> </Value5> <Value6 /> /* No anchor link exist, but I would like to add the same format as Value5 */ </StartOne> </root> Sql(当前仅查看锚链接是否已存在并更新): BEGIN SET NOCOUNT ON; --Declare @xml xml; Select @xml = cast([content_html] as xml) From [Db1].[dbo].[zTable] Declare @locID varchar(200); Declare @locTitle varchar(200)
  • Mybatis原理--动态生成SQL
    本文将带你分析Mybatis是如何动态生成SQL。 首先,会根据源码分析框架初始化时xml文件的加载、解析、缓存过程。着重介绍 xml的解析过程 和 使用解析的结果,最后列举实例和对照源码DeBug分析:当DAO接口调用时标签的解析、参数的创建、SQL的生成过程,并总结整个流程。 数据的处理 Mybatis对数据的处理可以分为 用入参动态的拼装sql 和 对sql执行的结果封装成 JavaBean 这里包括两个过程:1. 查询阶段我们要将java类型的数据,转换成jdbc类型的数据,通过 preparedStatement.setXXX() 来设值 2. 另一个就是对resultset查询结果集的jdbcType 数据转换成java 数据类型,本文只介绍第一个过程。 根据传入的参数动态的拼装sql 在Mybatis中,需要根据xml标签的语法编写出动态SQL,在执行的时候会根据标签进行解析,这里使用的是 Ognl 来解析标签动态地构造SQL语句 分析parseDynamicTags 的解析过程: Spring与Mybatis整合的时候需要配置SqlSessionFactoryBean,该配置会加入数据源和Mybatis xml配置文件路径等信息 <bean id="sqlSessionFactory" class="org.mybatis.spring
  • Mysql5.7安装server_audit审计
    目录 1. 查看插件安装目录 2 .提取mariadb审计插件并放置插件目录 3. mysql安装server_audit.so插件 4. 开启审计,写入配置文件 5. 查看server_audit.log审计日志文件 6. server_audit参数说明 7. 卸载审计插件 8. Windows版 由于MySQL的社区版不支持审计系统,可通过第三方插件实现,此次采用MariaDB的server_audit插件来记录{时间,节点,用户,源IP,事件类型,库,语句,影响行数},注:从mysql8开始已不支持该插件。 1. 查看插件安装目录 mysql> show global variables like 'plugin_dir'; +---------------+-------------------------------+ | Variable_name | Value | +---------------+-------------------------------+ | plugin_dir | /opt/mysql/5.7.18/lib/plugin/ | 2 .提取mariadb审计插件并放置插件目录 wget https://mirrors.tuna.tsinghua.edu.cn/mariadb//mariadb-10.5.3/bintar-linux-x86
  • 如何动态加载单独的“应用程序设置”文件并与当前设置合并?(How to load a separate Application Settings file dynamically and merge with current settings?)
    问题 有一些问题与从单独的配置文件中读取设置有关,还有其他与之类似,但是我的问题是特定于应用程序属性设置(即<MyApplication.Properties.Settings> -参见下面的XML文件)以及如何动态加载它们的。 我尝试了本文中的方法,该方法涉及刷新主配置文件的整个appSettings部分,但是由于我没有替换appSettings部分,因此我的修改抛出了异常: var config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.PerUserRoamingAndLocal); // Have tried the other ConfigurationUserLevels to no avail config.AppSettings.File = myRuntimeConfigFilePath; config.Save(ConfigurationSaveMode.Modified); // throws ConfigurationErrorsException ConfigurationManager.RefreshSection("userSettings"); ConfigurationErrorsException.Message为“根元素必须与引用文件
  • 通过 xsl 动态更改 HTML(Change HTML dynamically thru xsl)
    问题 我有以下 html: <!DOCTYPE html> <html> <head> <style> table, th, td { border: 1px solid black; border-collapse: collapse; } th, td { padding: 5px; } </style> </head> <body> <table style="width:100%"> <tr> <th>Name</th> <th>City</th> <th>State</th> <th>Zip</th> </tr> <tr> <td> [lastName],[firstName] </td> <td>[City]</td> <td>[State]</td> <td>[Zip]</td> </tr> </table> </body> </html> 我将从 xml 中获取值 <person> <lastName>Zones</lastName> <firstName>Adam</firstName> <City>Columbus</City> <State>OH</State> <Zip>44250</Zip> </person> 我想动态地将表数据<td>元素中的值替换为: <td>Zones, Adam</td> <td>columbus</td> <td>OH</td>
  • 手把手教你实现MySQL读写分离+故障转移,不信你学不会!
    前言 上一篇发了手动搭建Redis集群和MySQL主从同步(非Docker)之后,很多同学对文中主从结构提到的读写分离感兴趣,本打算在双十一期间直接把读写分离分享给大家,奈何工作一直没停下,所以这周抽空把这些分享出来。 关于MySQL的读写分离的实现,有两种方式,第一种方式即我们手动在代码层实现逻辑,来解析读请求或者写请求,分别分发到不同的数据库中,实现读写分离;第二种方式就是基于MyCat中间件来实现读写分离的效果;这两种方式我都会在这篇博客中进行详细地介绍、搭建,并且分析其中的优劣。 原理初探 从MySQL的主从同步开始谈起,最开始我们的数据库架构是这样的。 主库负责了所有的读写操作,而从库只对主库进行了备份,就像我在上一篇文章中说的那样,我认为如果只实现了一个备份,不能读写分离和故障转移,不能降低Master节点的IO压力,这样的主从架构看起来性价比似乎不是很高。 我们所希望的主从架构是,当我们在写数据时,请求全部发到Master节点上,当我们需要读数据时,请求全部发到Slave节点上。并且多个Slave节点最好可以存在负载均衡,让集群的效率最大化。 那么这样的架构就不够我们使用了,我们需要找寻某种方式,来实现读写分离。那么实际上有两种方式。 方法1:代码层实现读写分离 这种方法的优势就是比较灵活,我们可以按照自己的逻辑来决定读写分离的规则。如果使用了这样的方法
  • 在 SQL2005 中使用一个命令将多行插入到临时表中(Insert multiple rows into temp table with one command in SQL2005)
    问题 我有以下格式的一些数据: -1,-1,-1,-1,701,-1,-1,-1,-1,-1,304,390,403,435,438,439,442,455 我需要将它插入到这样的临时表中: CREATE TABLE #TEMP ( Node int ) 这样我就可以将它与另一个表中的数据进行比较。 上面的数据代表“节点”列的单独行。 有没有一种简单的方法可以在一个命令中插入这些数据? 此外,数据实际上将作为字符串传入......所以我需要能够将它连接到 SQL 查询字符串中。 如果需要,我显然可以先修改它。 回答1 尝试类似的东西 CREATE TABLE #TEMP ( Node int ) DECLARE @textXML XML DECLARE @data NVARCHAR(MAX), @delimiter NVARCHAR(5) SELECT @data = '-1,-1,-1,-1,701,-1,-1,-1,-1,-1,304,390,403,435,438,439,442,455 ', @delimiter = ',' SELECT @textXML = CAST('<d>' + REPLACE(@data, @delimiter, '</d><d>') + '</d>' AS XML) INSERT INTO #TEMP SELECT T.split.value('
  • 如何将行动态添加到表布局(How to add rows dynamically into table layout)
    问题 我在sqllite中有某些数据,并且每当每次单击保存按钮时它都会更新,我想将数据显示到表布局中,以便为更新的数据添加更多行。 我有某些代码,但是它只显示更新的数据来替换以前的数据,并且我想在数据更新时添加更多行。 我知道这只是在表布局中添加一行,但是如何添加更多行呢? TableLayout tl=(TableLayout)findViewById(R.id.maintable); TableRow tr1 = new TableRow(this); tr1.setLayoutParams(new LayoutParams( LayoutParams.FILL_PARENT,LayoutParams.WRAP_CONTENT)); TextView textview = new TextView(this); textview.setText(data); //textview.getTextColors(R.color.) textview.setTextColor(Color.YELLOW); tr1.addView(textview); tl.addView(tr1, new TableLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT)); 回答1
  • Mycat核心概念
    Mycat的核心概念如图(1)逻辑库(schema)Mycat作为一个中间件,实现MySQL协议,对前端应用连接来说就是一个数据库,无须让开发人员知道中间件存在,所以数据库中间件可以被当作一个或多个数据库集群构成的逻辑库。(2)逻辑表(table)有逻辑库,就会有逻辑表。在分布式数据库中,对应用来说,读写数据的表就是逻辑表。逻辑表可以是数据切分后分布在一个或多个分片库中,也可以不做数据切分,不分片,只由一个表构成。(3)分片表分片表是指那些原有的拥有很多数据、需要切分到多个数据库的表。每个分片都有一部分数据,所有分片构成了完整的数据。(4)非分片表一个数据库中并不是所有的表都很大,某些表是可以不进行切分的。非分片表是相对分片表来说的,就是那些不需要进行数据切分的表。(5)ER表关系型数据库是基于实体关系模型(Entity-Relationship Model)之上的,描述了真实世界中的事物与关系。Mycat中的ER表就来源于此。根据这一思路,提出了基于E-R关系的数据分片策略,子表的记录与所关联的父表记录存放在同一个数据分片上,即子表依赖于父表,通过表分组(Table Group)保证数据join关联查询不会跨库操作。表分组(Table Group)是解决跨分片数据join关联查询的一种很好的解决方法,也是数据切分规划很重要的一条原则。(6)全局表在业务系统中
  • dynamically read xml element and value in java
    I'm trying to read XML(whatever, i don't know it's structure, bcz i'm reading flie from server.), and i searched a lot on SO. but not found anything helpful. 1> i want to retrieve XML's node name, starting from root to end of file, child or child of child untill there's no child or sibling remaining. 2> in similar question, i found that they use tagname to retrieve value of that tag, so i want to pass that node name inside this to get value... is it possible to do dynamically. or have to follow same structure as in previous questions like statically add tagname to retrieve value. after doing
  • springboot运行/打包时动态指定配置文件application-*.yml
    resources下新建application.yml、application-dev.、application-test.yml、application-pro.yml application.yml 项目统一配置,不管是开发环境、测试环境或生产环境,都无需更改的配置,如mybatis配置、shiro配置、jwt配置等等application-dev.yml 开发环境,配置数据库连接、redis连接、ftp、fastdfs等等application-test.yml 测试环境,配置数据库连接、redis连接、ftp、fastdfs等等application-pro.yml 生产环境,配置数据库连接、redis连接、ftp、fastdfs等等 在web项目的pom.xml文件里,增加如下配置 <profiles> <!--开发环境 --> <profile> <id>dev</id> <properties> <profiles.active>dev</profiles.active> </properties> <activation> <activeByDefault>true</activeByDefault> </activation> </profile> <!--测试环境 --> <profile> <id>test</id> <properties>
  • RepMet: Representative-based metric learning for classification and few-shot object detection
    简介 距离度量学习(DML)已成功地应用于目标分类,无论是在训练数据丰富的标准体系中,还是在每个类别仅用几个例子表示的few-shot场景中。在本文中,我们提出了一种新的DML方法,在一个端到端训练过程中,同时学习主干网络参数、嵌入空间以及该空间中每个训练类别的多模态分布。对于基于各种标准细粒度数据集的基于DML的目标分类,我们的方法优于最先进的方法。此外,我们将提出的DML架构作为分类头合并到一个标准的目标检测模型中,证明了我们的方法在处理few-shot目标检测问题上的有效性。与强基线相比,当只有少数训练示例可用时,我们在ImageNet-LOC数据集上获得了最佳结果。我们还为该领域提供了一个新的基于ImageNet数据集的场景benchmark,用于few-shot检测任务。 1、简介 由于深度神经网络(DNNs)在图像分类和检测方面取得了巨大的成功,现在被广泛接受为几乎所有计算机视觉应用的“特征提取器的选择”,主要是因为它们能够从数据中学习到良好的特征。众所周知,从零开始训练一个常规的DNN模型需要大量的训练数据。然而,在许多实际应用中,每个类可能只给出几个训练样本来学习分类器。这就是所谓的“few shot学习”。 最近的研究已经取得了重大进展,在使用DNNs的few shot学习。对于特定领域的任务,如人脸识别和一般类别的分类,已经证明了这一点。然而
  • 配置Mycat高可用学习文档
    文章目录 一.基于HA机制的Mycat高可用1.HAProxy+Keepalived+两台Mycat2.安装HAProxy3.配置Keepalived 二.Mycat的安全设置1.权限配置2.SQL拦截 三.Mycat监控工具1.Mycat-web简介2.Mycat-web配置使用 一.基于HA机制的Mycat高可用 上述的主从复制,读写分离,分库,分表都是保证了mysql的高可用性,但是Mycat的高可用并没有保证.在实际项目中,Mycat 服务也需要考虑高可用性,如果 Mycat 所在服务器出现宕机,或 Mycat 服务故障,需要有备机提供服务,需要考虑 Mycat 集群。 1.HAProxy+Keepalived+两台Mycat 我们可以使用 HAProxy + Keepalived 配合两台 Mycat 搭起 Mycat 集群,实现高可用性。HAProxy 实现了 MyCat 多节点的集群高可用和负载均衡,而 HAProxy 自身的高可用则可以通过 Keepalived 来 实现。 编号角色IP地址机器名1Mycat1192.168.XXX.XX1host012Mycat2192.168.XXX.XX2host023HAProxy(master)192.168.XXX.XX3host034Keepalived(master)192.168.XXX
  • What Cross-Browser issues have you faced? [closed]
    As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be supported by facts, references, or expertise, but this question will likely solicit debate, arguments, polling, or extended discussion. If you feel that this question can be improved and possibly reopened, visit the help center for guidance. Closed 9 years ago. While developing for multiple sets of browsers, what issues have you faced while development due to differences in browser implementation? To start with I am listing some of those which i faced: A text node in Firefox allows only 4K data
  • 【DB笔试面试725】在Oracle中,什么是GPnP?
    ♣ 题目 部分在Oracle中,什么是GPnP? ♣ 答案部分 网格即插即用(Grid Plug and Play,GPnP)是Oracle 11gR2 RAC提供的新组件,该组件的功能由gpnpd.bin守护进程实现。GPnP可以提供一个动态的GI环境,能随着负载的增加而动态改变GI环境。GPnP能非常容易地添加、替换或者移除集群中的节点,就像电源插头一样即插即用。GPnP主要由GPNPD、mDNS、SCAN和GNS组成。mDNS(Multicast Domain Name Service)负责在节点内部进行IP的解析,在添加节点的时候不需要手动修改每个节点的/etc/hosts文件。GPNPD服务提供的是集群配置信息管理,新的节点添加进来会根据现有的GPnP profile配置信息来配置新的节点,同时更新所有节点的GPnP profile文件。一旦新添加的节点加入到集群,SCAN机制动态地将连接分配给该节点,所有的客户端都不需要进行任何配置的变更,就能实现节点的负载均衡。GNS(Grid Naming Service)能动态地为新添加的节点分配VIP地址,利用DHCP管理公共网络中的IP地址。这些服务共同构成了“网格即插即用”的特性。GPnP profile存储了整个集群的配置信息,它是一个XML文件,该文件中包括了集群名称、网络类型(public/private)
  • 【OH】SET System Variable Summary SQLPLUS 系统变量设置
    【OH】SET System Variable Summary SQLPLUS 系统变量设置SET System Variable Summary System VariableDescriptionSET APPI[NFO]{ON |?OFF?|?text}Sets automatic registering of scripts through the DBMS_APPLICATION_INFO package.SET ARRAY[SIZE] {15?|?n}Sets the number of rows, called a batch, that SQL*Plus will fetch from the database at one time.SET AUTO[COMMIT]{ON |?OFF?| IMM[EDIATE] |?n}Controls when Oracle Database commits pending changes to the database.SET AUTOP[RINT] {ON |?OFF}Sets the automatic printing of bind variables.SET AUTORECOVERY [ON |?OFF]ON sets the RECOVER command to automatically apply the
  • Xslt:动态创建名称空间(Xslt : Create a namespace dynamically)
    问题 以下是XML数据中的节点 <WebServiceUrl>"http://webser.part.site"</WebServiceUrl> <UserName>nida</UserName> <Passsword>123</Password> 我已经将此节点值传递给Xslt服务,现在我在参数中具有此URL NODE值,例如 <xsl:param name="UserName"/> <xsl:param name="Password"/> <xsl:param name="WebServiceUrl"/> 现在我想创建一个soapenv:Envelope标签并在其中使用此值 <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:web="$WebServiceUrl"> 因此,我希望从XSLT代码获得的最终输出是: <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:web="http://webservice2.partner.insite"> <soapenv:Header/> <soapenv:Body> <web:upload> <web
  • Xslt : Create a namespace dynamically
    Following are the nodes in XML Data <WebServiceUrl>"http://webser.part.site"</WebServiceUrl> <UserName>nida</UserName> <Passsword>123</Password> I have passed this node value to Xslt Service now i have this url NODE value in parameter e-g <xsl:param name="UserName"/> <xsl:param name="Password"/> <xsl:param name="WebServiceUrl"/> Now i want to create a soapenv:Envelope tag and use this value in it <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:web="$WebServiceUrl"> So the final outPut which i want from XSLT Code is as : <soapenv:Envelope xmlns:soapenv="http:/
  • 如何动态设置 XSLT 转换输出 XML 的默认命名空间声明?(How can I dynamically set the default namespace declaration of an XSLT transformation's output XML?)
    问题 我可以做到,但不能使用<xsl:namespace>.的默认命名<xsl:namespace>. 如果我尝试为默认命名空间执行此操作: <xsl:namespace name="" select"myUri"/> 它永远不会奏效。 它要求我明确定义元素的命名空间才能使用上述空前缀声明。 我想要这个的原因是因为我有一个将输入 XML 文件转换为另一个输出 xml 的任务。 输出 XML 有很多元素,我不想为每个元素显式设置命名空间。 这就是为什么我想设置默认值并且不再打扰。 但默认值必须根据源 XML 中的某些数据计算得出。 它在整个转换过程中不会改变,但它依赖于输入的 XML 数据。 有什么解决办法吗? 编辑1:补充: 我想动态创建一个命名空间并将其设置为输出 xml 文档的默认命名空间。 命名空间的 uri 派生自输入 XML 中的某些数据。 如果我在根输出元素中使用<xsl:namespace> ,则无法为其创建默认命名空间,只能创建一个带前缀的命名空间。 即使有前缀的,它也不会传播给孩子。 编辑 2:dkackman 建议: <xsl:template match="root"> <xsl:param name ="ns">my-computed-namespace</xsl:param> <xsl:element name="newRoot" namespace="{