2011-07-28 7 views
0

C#アプリケーションでデータテーブルから読み込んだ後にxmlを作成する必要があります。このロジックは "'"と "&"を除いて正常に動作しています。これらの特殊文字に遭遇すると、生成されたxmlにエラーが発生しました。エラーは「必要な空白がありませんでした」DataTableからのXML作成エラー

上記の特殊文字のために次のコードを変更するにはどうすればよいですか?

フレームワーク:.NET 3.0

注:下記のコードは、すべての有効な文字であり、無効(特殊文字)何であるかを説明しています。

注:データテーブルは

ZipCode,City,State,County 
92357,VETRANS' HOSPITAL,CA,SAN BERDINO 
36675,MOBLE P&DC,AL,MOBLE 

コードがfolllowsのように見えるcsvファイルから読み込まれます....

StringBuilder xmlForCSV = new StringBuilder(); 
     xmlForCSV.Append("<root>"); 
     foreach (DataRow excelRow in dtCSVExcelSource.Rows) 
     { 
      string zipCode = RemoveSpecialCharacters(excelRow["ZipCode"].ToString()); 
      string city = RemoveSpecialCharacters(excelRow["City"].ToString()); 
      string state = RemoveSpecialCharacters(excelRow["State"].ToString()); 
      string county = RemoveSpecialCharacters(excelRow["County"].ToString()); 

      xmlForCSV.Append("<row ZipCode='" + zipCode + 
            "' City='" + city + 
            "' State='" + state + 
            "' County='" + county + "'/>"); 

     } 
     xmlForCSV.Append("</root>"); 

機能が

private string RemoveSpecialCharacters(string str) 
    { 
     StringBuilder sb = new StringBuilder(); 
     for (int i = 0; i < str.Length; i++) 
     { 
      if ((str[i] >= '0' && str[i] <= '9') || (str[i] >= 'A' && str[i] <= 'z' || (str[i] == '.' || str[i] == '_' || str[i] == '-' || str[i] == ' ' || str[i] == '(' || str[i] == ')' || str[i] == '/' || str[i] == '\\' || str[i] == '\'' || str[i] == '#'))) 
      { 
       sb.Append(str[i]); 
      } 
      else 
      { 
       if (str[i] == '&') 
       { 
        string ampersand = System.Convert.ToString(str[i]); 
       } 
       else 
       { 
        string specialCharacter = System.Convert.ToString(str[i]); 
       } 
      } 



     } 

     return sb.ToString(); 
    } 

おかげ

です

Lijo

+0

サンプルのdatatable/excelを得ましたか? – naveen

+0

xmlが生成されたサンプルcsvファイルの内容で投稿を更新しました。 – Lijo

+0

コードが正常に表示されます。その特定のエラーについてGoogleであなたに教えましたか? – Muse

答えて

2

アトリビュートを囲むのに一重引用符'を使用します。作成したXMLそのためそれを削除しませんあなたのRemoveSpecialCharacters機能は無効です。

<row ... City='VETRANS' HOSPITAL' ... /> 

がトラブルを引き起こしています。

すぐに解決するには、一重引用符をRemoveSpecialCharactersで許可しないでください。

特殊文字を自動的にエスケープする方法については、hereをご覧ください。

一般に、StringBuilderを使用してXMLを作成しないでください。 XmlTextWriterまたはXDocumentまたはdtCSVExcelSource.WriteXml(...)のようなものを使用してください。

目の前に:RemoveSpecialCharacters機能には多くの問題があります。

  • elseブロック内のコードは何
  • 範囲str[i] >= 'A' && str[i] <= 'z'が異常であるとことができます許可
  • 適切にバランスの取れていないようだstr[i] >= 'A'前に始まり、括弧をしないような文字:[\]^_
+1

+1:HtmlEncodeは行く道です。 – naveen

+0

データテーブルのWriteXmlを使用して解決しました。 – Lijo

関連する問題