我必须编辑一个构建xml字符串的存储过程,以便所有元素值都包装在cdata中。一些值已经包装在cdata中,所以我需要忽略它们。
我认为这是学习一些正则表达式的好尝试
From: <element>~DATA_04</element>
to: <element><![CDATA[~DATA_04]]></element>
我有什么选择如何做到这一点?我可以做简单的正则表达式,这是更先进的。
注意:<element>
是通用的,仅用于说明目的,实际上,它可能是任何内容并且未知。
示例文字:
declare @sql nvarchar(max) =
' <data>
<header></header>
<docInfo>Blah</docInfo>
<someelement>~DATA_04</someelement>
<anotherelement><![CDATA[~DATA_05]]></anotherelement>
</data>
'
使用样本xml,正则表达式需要找到一些元素,并像<someelement><![CDATA[~DATA_04]]></someelement>
一样添加cdata,并保留其他元素。
请记住,我没有编写这个可怕的sql代码,我只需编辑它。
答案 0 :(得分:0)
这是c#:
string text = Regex.Replace( inputString, @"<element>~(.+)</element>", "<element>![CDATA[~$1]]</element>" , RegexOptions.None );
发现是:
<element>~(.+)</element>
替换是:
<element>![CDATA[~$1]]</element>
我假设元素标签内部的开头有一个〜。
如果这是一个问题,您还需要留意空白......
您可能想要添加一些
\s*
任何空白字符,零个或多个匹配
答案 1 :(得分:0)
尝试使用(<[^>]+>)(\~data_([^<]+))(<[^>]+>)
并替换\1<![CDATA[\2]]>\4
这会给你:<element><![CDATA[~DATA_04]]></element>
,
元素可以是其他任何东西。查看http://localhost/test/test.php