假设我有这样的SQL查询:
SELECT column_name FROM table WHERE columnid <= 5
在orm.xml中定义如下:
<named-query>
<query>
sql query
</query>
</named-query>
环境说xml没有很好地形成,因为&lt;字符。所以我用google搜索解释,我发现,我必须转义字符,如下例所示
< = < , > = >
但是当我对这些字符进行excaped时,查询不会执行。这是无效的,因为逃避。您是否知道如何解决此问题或任何解决方法?
答案 0 :(得分:0)
不知道这是否仍然存在,但是 - 至少 - 没有答案:
您不应该将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
部分,例如:
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中。但这已经过时,并且不直接在SQL-Server中支持(嗯,有FOR XML EXPLICIT
,它本身已经过时了)。 SQL-Server实际上会将上面没有CDATA
的内容自动存储为转义字符串。在语义上它是一样的......