2016-05-30 11 views
1

動作しません:MaxCharactersInDocumentの検証は、私は、XML文書内の最大文字数を検証しよう

string xml = "<X><Y><Z></Z><Z></Z><Z></Z></Y></X>"; 

var settings = new XmlReaderSettings 
       { 
        MaxCharactersInDocument = 10 
       }; 

try 
{ 
    using(var sr = new StringReader(xml)) 
    { 
     using(var xr = XmlReader.Create(sr)) 
     { 
      using(var xr2 = XmlReader.Create(xr, settings)) 
      { 
       while(xr2.Read()){} // MaxCharactersInDocument validation do not work 
      } 
     } 
    } 
} 
catch (XmlException ex) 
{ 
    Console.WriteLine(ex.Message); 
} 

porposeが最大charcters用(XmlReaderを受けて)外部XMLを検証することです。 MaxCharactersInDocument検証が別のXmlReaderで作成されたXmlReaderで機能しないのはなぜですか?この検証方法をどうやって変えることができますか?

また、スキームの検証は2番目のリーダーで有効ですが、最大文字の検証では機能しません。

+0

?最初のCreate()メソッドに設定を追加できます。 – jdweng

+0

@jdweng、最初のリーダーは、いくつかのアプリケーション用の外部リーダーです。そして、最大のcharctersのために外部XML(XmlReaderで受け取った)を検証することです。また、スキームの検証は2番目のリーダーで有効ですが、最大文字の検証では機能しません。どうして? –

+0

エンコードに問題がある可能性があります。 StringReader()パラメータリストにエンコーディングメソッドを追加することで、問題を解決できる場合があります。 – jdweng

答えて

0

MSDN's working example for MaxCharactersInDocumentを見てみると、

次のようにも、あなたの入力で動作します:

 string markup = "<X><Y><Z></Z><Z></Z><Z></Z></Y></X>"; 

     //string markup = "<Root>Content</Root>"; 

     XmlReaderSettings settings = new XmlReaderSettings(); 
     settings.MaxCharactersInDocument = 10; 

    try 
    { 
     XmlReader reader = XmlReader.Create(new StringReader(markup), settings); 
     while (reader.Read()) { } 
    } 
    catch (XmlException ex) 
    { 
     Console.WriteLine(ex.Message); 
    } 

StringReaderオブジェクトはそれを動作させるためのXmlReader.Create方法で入力として使用されなければならないようです。


出力:なぜあなたは、2つの文を作成する必要がありますか

enter image description here

+0

@jdwengが何を見つけたかに関係するように見えます... – Veverke

関連する問題