2017-09-11 19 views
0

はのは、私はこのようなSQLクエリを持っていると言うことはできません。SQLクエリがあるため、エスケープ文字の実行

このようなorm.xmlで定義されて
SELECT column_name FROM table WHERE columnid <= 5 

<named-query> 
    <query> 
    sql query 
    </query> 
</named-query> 

環境がXMLではないことを言いましたよく形成されたのは、<のためです。それでは、私は説明のためのグーグルと私は、次の例

< = &lt , > = &gt 

のように文字をエスケープする必要があること、見つかったが、私はこれらの文字をexcaped際、クエリが実行されません。エスケープのために有効ではありません。これを解決する方法や回避策をお持ちですか?

+0

xmlからどのようにクエリを取得していますか? <<から<へHTTPデコードする必要があります。ここのようなもの。リンクのサンプルを参照して、「デコード」をクリックします。 https://codebeautify.org/html-decode-string – Amit

+2

「>」セミコロン。通常のXML API関数の設定と取得を使用すると、これは隠されます。 –

+0

まあ、私は正確にどのように私はクエリをピックアップして、このorm.xmlファイルがどこにマップされていない原因知っていない...私は春と休止状態で作業するので、何とかそれ自体を行う必要があります – madStudent

答えて

0

これはまだ開いている場合は知っているが、しないでください - 少なくとも - それは未解決です:

あなたは空想の余分な文字を文字列としてXMLを考えるべきではありません。コンテンツをに入れて XMLにはいくつかの規則があり、値はからにあるXMLにもいくつかのルールがあります。 が文字列レベルのXMLのようにと思われるものを簡単に作成できますが、xmlが有効でない場合は問題が発生します。

最も重要な例外は - 明らかです! - <, > and &、エスケープされていなければ、マークアップを妨げるでしょう。

DECLARE @xml XML=N'<root>SELECT column_name FROM table WHERE columnid &lt;= 5</root>'; 
SELECT @xml.value(N'(/root/text())[1]',N'nvarchar(max)'); 

エスケープ文字が暗黙的に再変換されています。 しかし、適切なツールを使ってXMLを読む必要があります!。あなたが文字列メソッド(substringのような)でXMLを読んだら、あなたは自分自身を再エスケープする必要があります。あなたはCDATA -sectionここのように使用することができます:これは、あなたがそのままを取ることになるXMLにテキストを配置することができます

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)'); 

- ないことをお勧め - 回避策

することがあります。しかし、これは時代遅れであり、SQL-Serverでは直接サポートされていません(それ自体が古くなっている​​があります)。 SQLサーバーは実際にはCDATAをエスケープ文字列として自動的に格納しません。意味的には同じです...

関連する問題