2009-06-21 10 views
0

XML UTF-8エンコーディングで特定の入力文字列が有効かどうか(XML要素の値として使用できるかどうか)をもう一度確認しています。私の目標は、どの文字列(入力文字列配列から)がXML UTF-8エンコーディング標準に従って正しくないかを調べることです。XML検証コードが有効かどうかを確認するヘルプ

私のコードは、私の現在の実装は簡単です - 入力文字列配列から個々の文字列でXMLファイルをアセンブルします。私はそれが最も効率的な方法かどうかはわかりません。機能的な観点から、それは動作します。

私の仕事環境は.Net 3.5 + VSTS 2008 + C#です。事前に

static void Main(string[] args) 
    { 
     string[] inputs = { "Hello", "World", "StackOverflow", "ServerFault", "&#DFFE" }; 
     XmlDocument xDoc = new XmlDocument(); 
     string header = "<?xml version=\"1.0\" encoding=\"utf-8\"?>"; 
     string formatter = "<foo>{0}</foo>"; 
     foreach (string item in inputs) 
     { 
      StringBuilder builder = new StringBuilder(); 
      builder.Append (header); 
      builder.Append (String.Format(formatter, item)); 
      try 
      { 
       xDoc.Load(new StringReader(builder.ToString())); 
      } 
      catch (Exception ex) 
      { 
       Console.WriteLine(ex.ToString()); 
      } 
     } 
    } 

おかげで、 ジョージ

答えて

1

ジョージ、テストを書くとき、それは失敗のケースを実証テストを開始するのが最善です。

あなたのコードは今まで失敗しますか?私はそうは思わない。

このテストを作成した問題に近いテストから始めてください。私はあなたが正しくエンコードされていないXMLファイルに問題があったと思いますか?その場合、悪いファイルが悪いことを証明するテストを作成して(それが本当であると分かっている)、テストを一般化して、他の悪いファイルを悪いと見なすことができるようにします。 。

+0

こんにちはジョン、私は、私のquesitonは、テストする方法については無効ではありませんされ、入力のどのような種類が、私の現在の簡単な実装は1で、文字列1をチェックするかどうかを理解(XMLファイルを構築する方法で)十分に効率的であり、より効率的にチェックするためのよりよい方法はありますか?何か誤解があれば教えてください。私は機能を要求するのではなく、パフォーマンスです。 – George2

+0

"あなたのコードは今までに失敗するだろうか?私はそうは思わない。 - xxxxがXMLの有効な範囲にない場合、無効な入力があると、例えば、&#xxxxのように私のコードは失敗します。 http://en.wikipedia.org/wiki/XML – George2

+0

ウィキペディアのページの「数値の文字参照」セクションを参照してください。 – George2

1

あなたはこのような何かを行うことができます:

public static XmlElement xmlValidationElement = 
     new XmlDocument().CreateElement("validator"); 

    static void Main(string[] args) 
    { 
     string[] inputs = { "Hello", "World", "StackOverflow", "ServerFault" }; 
     foreach (string item in inputs) 
     { 
      try 
      { 
       xmlValidationElement.InnerXml = item; 
      } 
      catch (XmlException ex) 
      { 
       Console.WriteLine(ex.ToString()); 
      } 
     } 
    } 
+0

コードのパフォーマンスは私のものより優れていますか?なぜ? – George2

+0

はい、私のコードに含まれる唯一のステップは、実際の組み込み検証です。 StringBuilderなし、StringReaderなし、単一のXmlDocument、およびxml解析なしの単一のXmlElement。いくつかのテストを実行して実際の違いを見ることができます;) – Diadistis

関連する問題