2012-04-13 83 views
1

我已經編寫了一個C#應用程序,用於加載XML文件,解析它們並使用這些信息運行SQL查詢並將結果發送到電子郵件分發列表。有沒有辦法讓FORCIBLY允許在XML文件中使用'<' and/or '>'?

這些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> 
+3

爲什麼用戶手工編輯XML文件,而不是使用一個工具,然後創建XML?請注意'''在這裏無論如何都是有效的,IIRC - 在一個元素中,我認爲只有'<和'&'必須被轉義。 – 2012-04-13 13:36:41

+2

將它放在'<![CDATA ['和']]>'分界符之間的CDATA節中。您目前如何創建和編寫XML? – BoltClock 2012-04-13 13:37:17

+0

是的,我想我可以讓用戶使用一個單獨的工具來創建這些XML文件。讓該工具轉換SQL中的特殊字符。 – carny666 2012-04-13 14:07:50

回答

5

你可以用你的查詢中CDATA

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

是的,這是有效的..不是我希望的解決方案,但它顯然是唯一正確的答案。 – carny666 2012-04-13 14:08:37

1

使用CDATA,CDATA中的文本未被解析,如下所示:

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

您將需要圍繞與CDATA文本,以便它看起來像這樣:

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

這就告訴一切之間應被視爲文本,不應該被解釋解析器。

1

使用CDATA。所以:

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

一個CDATA節內的文本被解析器忽略。

0

您可以使用正則表達式預處理文件,該正則表達式查找<和>不屬於標記的文件,並相應地替換它們。

你可以使用這個表達式:

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

(請注意,您必須使用單行和忽略空格選項,通過(?sx)爲配合建立

這個表達式捕獲或小於和大於這不屬於標籤的ltgt組符號。

可以更換比賽。

如果你想知道它是如何工作的,這抓住了命名組的一切:

(?sx) 
    \s* 
    (?<head><\?.*?\?>)(?:\s*) 
    (?: 
    (?<tag><[^\s]*?>)\s* 
    |(?<others>[^<>]*\s) 
    |(?<lt><) 
    |(?<gt>>) 
    )* 
    \s* 
相關問題