假设我有这样的sql查询:
SELECT column_name FROM table WHERE columnid <= 5在orm.xml中定义如下:
<named-query>
<query>
sql query
</query>
</named-query>环境中说,由于<字符,xml格式不太好。于是我在googled上搜索解释,我发现我必须转义字符,如下例所示
< = < , > = >但是,当我导出这些字符时,查询不会执行。这是无效的,因为逃跑了。请您知道如何解决这个问题或解决问题吗?
发布于 2017-11-14 09:30:52
不知道它是否还开着,但是--至少--它还没有答案:
您不应该认为XML是一个带有额外字符的字符串。将内容放入XML中有一些规则,从XML内部读取值也有一些规则。您可以很容易地在字符串级别创建类似于XML的东西,但是--如果xml列表无效--您将陷入麻烦。
最重要的例外是-显然!- <, > and &,如果不是转义的话,它会干扰标记。
DECLARE @xml XML=N'<root>SELECT column_name FROM table WHERE columnid <= 5</root>';
SELECT @xml.value(N'(/root/text())[1]',N'nvarchar(max)');你会发现,转义字符是隐式转换的。,但是您必须使用适当的工具来读取XML!。如果使用字符串方法(如substring)读取XML,则必须确保重新转义。
有一种--不推荐--解决办法:您可以使用如下所示的CDATA-section:
DECLARE @xml XML=N'<root><![CDATA[SELECT column_name FROM table WHERE columnid <= 5]]></root>';
SELECT @xml.value(N'(/root/text())[1]',N'nvarchar(max)');这允许您将文本放置到XML中,这将被视为-is。但这是过时的,在Server中不直接支持(好吧,FOR XML EXPLICIT本身就过时了)。实际上,Server将在不使用CDATA的情况下自动将其存储为转义字符串。语义上是一样的..。
https://stackoverflow.com/questions/46151143
复制相似问题