替换xml属性值中的特殊字符

拉吉

我需要更新表中的xml列,以删除特定节点Rating Ratingtype =“ unknown”的特殊char(%)。除上述节点外,其他节点中出现的特殊字符不应更改。以下是我的意见和期望的结果。

            Input xml:
            <Ratings>
              <Rating Ratingtype="unknown">
                <AppliedKnowledge value="Yes%">3.0</AppliedKnowledge>
                <ToolSkills>3.5</ToolSkills>
              </Rating>
              <Rating Ratingtype="known">
              <AppliedKnowledge value="%Yes%">3.0</AppliedKnowledge>
                <Experience>9.5</Experience>
                <Education>16.0</Education>
                <DbDevelopment>4.5</DbDevelopment>
              </Rating>
              <Rating Ratingtype="unknown">
                <AppliedKnowledge value="%No%">4.0</AppliedKnowledge>
                <ToolSkills>4.5</ToolSkills>
              </Rating>
            </Ratings>

            Expected output xml:
            <Ratings>
              <Rating Ratingtype="unknown">
                <AppliedKnowledge value="Yes">3.0</AppliedKnowledge>
                <ToolSkills>3.5</ToolSkills>
              </Rating>
              <Rating Ratingtype="known">
              <AppliedKnowledge value="%Yes%">3.0</AppliedKnowledge>
                <Experience>9.5</Experience>
                <Education>16.0</Education>
                <DbDevelopment>4.5</DbDevelopment>
              </Rating>
              <Rating Ratingtype="unknown">
                <AppliedKnowledge value="No">4.0</AppliedKnowledge>
                <ToolSkills>4.5</ToolSkills>
              </Rating>
            </Ratings>
Shnugo

与您的最后一个问题类似,这并不容易。

.modify()方法将允许每个调用一次更改。这意味着您必须使用某种循环。

仍然有一些方法:

如果%未在其他任何地方使用,则可以简单地执行以下操作:

将XML强制转换为VARCHAR,进行简单的文本替换并将其强制转换

SELECT CAST(REPLACE(CAST(@YourXml AS VARCHAR(MAX)),'%','')  AS XML)

比循环更好的是

切细XML并重新构建。REPLACE仅在目标值上使用

DECLARE @x XML=
'<Ratings>
  <Rating Ratingtype="unknown">
    <AppliedKnowledge value="Yes%">3.0</AppliedKnowledge>
    <ToolSkills>3.5</ToolSkills>
  </Rating>
  <Rating Ratingtype="known">
    <AppliedKnowledge value="%Yes%">3.0</AppliedKnowledge>
    <Experience>9.5</Experience>
    <Education>16.0</Education>
    <DbDevelopment>4.5</DbDevelopment>
  </Rating>
  <Rating Ratingtype="unknown">
    <AppliedKnowledge value="%No%">4.0</AppliedKnowledge>
    <ToolSkills>4.5</ToolSkills>
  </Rating>
</Ratings>';

SELECT CAST(REPLACE(CAST(@x AS VARCHAR(MAX)),'%','')  AS XML)

SELECT R.value('@Ratingtype','varchar(max)') AS [@Ratingtype]
      ,CASE WHEN R.value('@Ratingtype','varchar(max)')='unknown'
            THEN REPLACE(R.value('(AppliedKnowledge/@value)[1]','varchar(max)'),'%','')
            ELSE R.value('(AppliedKnowledge/@value)[1]','varchar(max)') END AS [AppliedKnowledge/@Value]
      ,R.value('AppliedKnowledge[1]','varchar(max)') AS [AppliedKnowledge]
      ,R.value('ToolSkills[1]','varchar(max)') AS [ToolSkills]
      ,R.value('Experience[1]','varchar(max)') AS [Experience]
      ,R.value('Education[1]','varchar(max)') AS [Education]
      ,R.value('DbDevelopment[1]','varchar(max)') AS [DbDevelopment]
FROM @x.nodes('/Ratings/Rating') AS A(R)
FOR XML PATH('Rating'),ROOT('Ratings')

结果

<Ratings>
  <Rating Ratingtype="unknown">
    <AppliedKnowledge Value="Yes">3.0</AppliedKnowledge>
    <ToolSkills>3.5</ToolSkills>
  </Rating>
  <Rating Ratingtype="known">
    <AppliedKnowledge Value="%Yes%">3.0</AppliedKnowledge>
    <Experience>9.5</Experience>
    <Education>16.0</Education>
    <DbDevelopment>4.5</DbDevelopment>
  </Rating>
  <Rating Ratingtype="unknown">
    <AppliedKnowledge Value="No">4.0</AppliedKnowledge>
    <ToolSkills>4.5</ToolSkills>
  </Rating>
</Ratings>

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在XML中查找和替换属性值

来自分类Dev

XML属性和ColdFusion中的特殊字符

来自分类Dev

如何使用python转义xml属性中的特殊字符

来自分类Dev

用R中的其他特殊字符替换特殊字符

来自分类Dev

使用SparkR替换列中的特殊字符

来自分类Dev

属性名称中的特殊字符

来自分类Dev

替换字符串中的特殊字符

来自分类Dev

替换Scala中的特殊字符

来自分类Dev

替换pyspark dataframe中的特殊字符?

来自分类Dev

在perl中搜索并替换特殊字符

来自分类Dev

如何用熊猫中的特殊字符替换列中的NULL值

来自分类Dev

在值中插入特殊字符

来自分类Dev

在XML中查找和替换CDATA属性值-Python

来自分类Dev

如何用特殊字符替换XML文档中的文本?

来自分类Dev

替换htaccess中的特殊字符

来自分类Dev

如何替换bash中的特殊字符

来自分类Dev

在php中查找和替换特殊字符

来自分类Dev

Ant用xml文件中的属性名称替换属性值

来自分类Dev

替换特定字段中的特殊字符

来自分类Dev

如何在Android中替换特殊字符?

来自分类Dev

用R中的其他特殊字符替换特殊字符

来自分类Dev

数据属性值中的特殊字符

来自分类Dev

替换字符串中的特殊字符

来自分类Dev

用python中的单词替换特殊字符

来自分类Dev

在XML DTD的枚举属性值中插入诸如“#”之类的特殊字符

来自分类Dev

替换Google Map中的特殊字符

来自分类Dev

如何在excel的每一行中按列值替换特殊字符?

来自分类Dev

替换字符串中的特殊字符

来自分类Dev

替换熊猫数据框中的特殊字符