我需要下载一个XML文件,并且它的数据是从存储过程中检索的。 我的问题是,如果数据包含任何'&'符号,则在XML文件中它显示为
'&'
我在程序中使用了REPLACE函数,如下所示,但是...
SELECT @V_NAME = REPLACE(@V_NAME, ' & ', ' & ');
UPDATE #TMP_RS_XML
SET OBJECT_ID=@V_ID,
FNAME=@V_FILE,
DOCUMENT=(SELECT @V_NAME as 'Description',
...
现在,输出为:
&
答案 0 :(得分:1)
这不是应该的工作方式...
XML不仅是带有额外花哨的文本,而且具有非常严格的规则。与任何基于文本的容器一样,您将需要魔术词或特殊字符来告诉消费者什么是内容,什么是标记。
XML中最重要的标记字符是<
和>
-当然。如果您希望这些字符成为内容的一部分,则必须替换它们。这是通过 xml实体完成的。
在内容中,任何XML实体都将以“&”号开头(<
以<
开头),因此,“&”号是第三重要的特殊字符。如果您要在内容中使用&符号,则必须在该位置使用实体(&
)作为的代码,我们希望在此使用&符号。
在查看XML时,您必须区分看到的文本和从XML中提取的实际内容。
尝试一下:
DECLARE @SomeStringWithSpecialCharacters NVARCHAR(200)=N'This & that -> let''s see, why how some foreign characters behave: அரிச். And what about a line break?' + CHAR(13) + CHAR(10) + 'Here is the second line. And an unprintable?' + CHAR(2);
-这里我们使用FOR XML
,所有转义都是隐式完成的
SELECT @SomeStringWithSpecialCharacters AS TestIt FOR XML PATH('test');
结果
<test>
<TestIt>This & that -> let's see, why how some foreign characters behave: அரிச். And what about a line break?
Here is the second line. And an unprintable?</TestIt>
</test>
现在,我将XML从第一部分中提取出来,并将其放入XML类型的变量中。
注意:我必须删除
实体,将其检出...
DECLARE @SomeXML XML=
N'<test>
<TestIt>This & that -> let''s see, why how some foreign characters behave: அரிச். And what about a line break?
Here is the second line. And an unprintable?</TestIt>
</test>';
-现在我们使用.value()
针对本地XML进行魔术:
SELECT @SomeXML.value('(/test/TestIt/text())[1]','nvarchar(max)');
结果是重新分隔所有实体:
This & -> let's see, why how some foreign characters behave: அரிச். And what about a line break?
Here is the second line. And an unprintable?
一般提示是:切勿自己进行更换。将内容推入XML 将需要转义,而将内容读入XML 将需要相反。当您使用适当的工具时,所有这些隐式地为您完成。
答案 1 :(得分:0)
'&'是从'&amp;表示出来的特殊字符。 '
此处的最佳做法是对XML进行解码,并在下面添加引用: