2016-05-21 9 views
0

Ich will nur sehen, ob xml mit dtd gültig ist und Fehlermeldung ausgeben, wenn es nicht ist. Ich habe diesen Validator geschrieben. Das Problem es druckt immer das Dokument ist gültig, auch wenn es nicht gültig ist. Danke für die Hilfe.Validiere xml mit dtd

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.Xml; 
using System.Xml.Schema; 


namespace XMLValidator 
{ 
    class Program 
    { 
     static void Main() 
     { 


      var messages = new StringBuilder(); 
      var settings = new XmlReaderSettings { ValidationType = ValidationType.DTD }; 
      settings.ValidationEventHandler += (sender, args) => messages.AppendLine(args.Message); 
      var reader = XmlReader.Create("file.xml", settings); 


      if (messages.Length > 0) 
      { 
       Console.WriteLine("Document is not valid!"); 
      } 
      else 
       Console.WriteLine("Document is valid!"); 
     } 

    } 
} 
+0

'Console.WriteLine ("Problem nicht klar ist!")': D 'funktioniert nicht' ist nie ein ausreichende Beschreibung eines Problems ... – har07

+0

Danke, har07. :) – Sardothien

+0

Wie sieht Ihr XML und die entsprechende DTD aus und wie haben Sie die beiden verknüpft? – har07

Antwort

2

Sie müssen auch DTD-Verarbeitung

var settings = new XmlReaderSettings { ValidationType = ValidationType.DTD, DtdProcessing = DtdProcessing.Parse }; 

und natürlich ermöglichen, müssen Sie durch die Datei beispielsweise unter Verwendung analysieren

while (reader.Read()) {} 

Auch wenn die DTD in einer externen Datei ist dann gesetzt auch

var settings = new XmlReaderSettings { ValidationType = ValidationType.DTD, DtdProcessing = DtdProcessing.Parse, XmlResolver = new XmlUrlResolver() }; 
+0

Vielen Dank, Martin aber es druckt immer nur "Dokument ist gültig" immer. :) – Sardothien

+0

@Sardothien, müssen Sie auch durch das XML analysieren. –

+0

Danke, Martin! Das Problem war, dass dtd eine externe Datei ist. :) :) :) :) – Sardothien