1

私は、XML ファイルをロードして解析し、その情報を使用して SQL クエリを実行し、結果を電子メールの配布リストに送信する C# アプリケーションを作成しました。

これらの XML ファイルは通常、END ユーザーによって作成されます。

現在、私は彼らに SQL の > と < を > と < に置き換えてもらっています。もちろん、彼らは時々忘れてしまう END ユーザーです。実際、彼らはいつも忘れています。クエリを XML ファイルに保存したいと思います。XMLファイルでこれらの特殊文字の使用を強制/許可する方法はありますか?

現在、ユーザーは次のように入力する必要があります。

<?xml version="1.0" encoding="utf-8" ?>
<report>
  <queries>
    <query>
       SELECT * FROM THETABLE WHERE THEVALUE &gt; 100
    </query>
  </queries>
</report>

次のように入力できるようにしてほしい:

<?xml version="1.0" encoding="utf-8" ?>
<report>
  <queries>
    <query>
       SELECT * FROM THETABLE WHERE THEVALUE > 100
    </query>
  </queries>
</report>
4

5 に答える 5

4

CDATAクエリを次のようにラップできます。

<?xml version="1.0" encoding="utf-8" ?>
<report>
  <queries>
    <query><![CDATA[
       SELECT * FROM THETABLE WHERE THEVALUE > 100
    ]]></query>
  </queries>
</report>
于 2012-04-13T13:36:53.103 に答える
1

CDATAを使用します。CDATA内のテキストは解析されません。次のようになります。

<query><![CDATA[SELECT * FROM THETABLE WHERE THEVALUE > 100]]></query>
于 2012-04-13T13:37:04.913 に答える
1

次のように、テキストを CDATA で囲む必要があります。

<?xml version="1.0" encoding="utf-8" ?>
<report>
  <queries>
    <query>
       <![CDATA[SELECT * FROM THETABLE WHERE THEVALUE > 100]]>
    </query>
  </queries>
</report>

これは、その間のすべてをテキストとして扱い、解釈しないようにパーサーに指示します。

于 2012-04-13T13:37:26.083 に答える
1

を使用しCDATAます。そう:

<query><![CDATA[SELECT * FROM THETABLE WHERE THEVALUE > 100]]></query>

CDATAセクション内のテキストは、パーサーによって無視されます。

于 2012-04-13T13:38:02.570 に答える
0

タグに属さない < および > を検索する正規表現を使用してファイルを前処理し、それに応じてそれらを置き換えることができます。

次の正規表現を使用できます。

    (?sx)
    \s*
    (?:<\?.*?\?>)(?:\s*)
    (?:
     (?:<[^\s]*?>)\s*
     |(?:[^<>]*\s)
     |(?<lt><)
     |(?<gt>>)
    )*
    \s*

( (?sx).

ltこの式は、 andgtグループのタグに属さない記号または小なり記号と大なり記号をキャプチャします。

マッチを交換できます。

それがどのように機能するかを知りたい場合、これは名前付きグループのすべてをキャプチャします:

    (?sx)
    \s*
    (?<head><\?.*?\?>)(?:\s*)
    (?:
     (?<tag><[^\s]*?>)\s*
     |(?<others>[^<>]*\s)
     |(?<lt><)
     |(?<gt>>)
    )*
    \s*
于 2012-04-13T14:31:39.597 に答える