2017-04-06 64 views
-1

我已手動創建的xml文件(DatabaseQueries.xml)如下(它包含數據庫查詢):C#從XML刪除換行符加載

<?xml version="1.0" encoding="utf-8" ?> 
<Queries> 
    <Query1> 
      SELECT a, b 
      FROM Table1 
      WHERE z = 1 
    </Query1> 

    <Query2> 
      SELECT a, b 
      FROM Table2 
    </Query2> 
</Queries> 

XML文件包含新行和空格。然後,我在我的項目中添加XML文件作爲一個資源文件,我使用加載:

XElement resource = XElement.Parse(Properties.Resources.DatabaseQueries); 

我想讀一個查詢元素,並將其轉換爲字符串,所以我做的:

resource.Element("Query1").Value 

但我獲得大量空間和換行符(\ n)。不要擔心空格,但我想刪除\ n或從不含\ n的xml中讀取值。

我用這個字符串來請求以後使用的SqlCommand從數據庫值等

我怎樣才能做到這一點?

+0

只需使用字符串替換方法將「\ n」替換爲「」(空格)即可。刪除只是「\ n」會給出錯誤。 – jdweng

回答

3

您可以使用正則表達式用一個空格來代替換行和重複的空格:

var query1 = Regex.Replace(resource.Element("Query1").Value.Trim(), @"\s+", " "); 

\s Metacharacter - 一個空白字符可以是:

  • 空格字符
  • 製表符
  • 回車符
  • 換行符
  • 垂直製表符

輸出:

"SELECT a, b FROM Table1 WHERE z = 1" 

注意!:作爲@Evk指出,這種方法雖然簡單,但它也可以修改字符串文字它們是用於您的查詢。我個人沒有看到連續包含幾個空格的文字,但是您應該知道這種行爲。如果你希望SQL格式化是100%安全的,那麼你應該給解析給定SQL查詢語法樹。然後將語法樹轉換爲格式化的SQL查詢。你可以使用像ANTLR這樣的工具,或者查看一些SQL parsing samples

+1

這是非常危險的建議,因爲它會摺疊包括字符串文字在內的所有空白。例如'WHERE z ='一些值將會變成'WHERE z ='一些值',這將改變查詢的含義。 – Evk

+1

@Evk完全同意,雖然我不會說它*非常*危險 - 坦率地說,您在SQL查詢中看到了多少次''一些值'?我還沒有:)解決方法很簡單,但應該謹慎使用。理想情況下,你需要SQL語法分析器,它將構建語法樹 –

+0

@Evk我同意,所以另一種解決方案來擺脫這種特殊情況? – user1624552