Programming‎ > ‎

XML

.NET 3.5 provided LINQ to XML framework.  Here is the page for tips.

Updated: 3/9/2012

Index


How can I see XmlReader content?

When you do the XML validation using XmlReader, I wanted to see where the validation failed. Here is the routine to put in while (reader.Read()) routine:

  
  void Print(XmlReader r)  
  {    
    if (r.NodeType.ToString() == "Whitespace")   
	// this is needed to ignore      
	  return;    
	Console.Write(r.NodeType.ToString().PadRight(17, '-'));    
	Console.Write("> ".PadRight(r.Depth * 3));    
	switch (r.NodeType)    
	{      
	  case XmlNodeType.Element:      
	  case XmlNodeType.EndElement:        
	    Console.WriteLine(r.Name); 
		break;      
	  case XmlNodeType.Text:      
	  case XmlNodeType.CDATA:      
	  case XmlNodeType.Comment:      
	  case XmlNodeType.XmlDeclaration:        
	    Console.WriteLine(r.Value); 
		break;      
	  case XmlNodeType.DocumentType:        
	    Console.WriteLine(r.Name + " - " + r.Value); 
		break;      
	  default:        
	    break;    
	}   
  }
  
You will do like the following:
   
  XmlReader reader = null;   
  XmlReaderSettings settings = new XmlReaderSettings();   
  XmlSchemaSet schemaSet = new XmlSchemaSet();   
  schemaSet.Add(schema);   
  settings.ValidationEventHandler += new ValidationEventHandler(ValidationEventHandler);   
  settings.ValidationFlags |= XmlSchemaValidationFlags.ReportValidationWarnings;   
  // settings.ValidationFlags |= XmlSchemaValidationFlags.ProcessInlineSchema;   
  // settings.ValidationFlags |= XmlSchemaValidationFlags.ProcessSchemaLocation;   
  settings.ValidationType = ValidationType.Schema;   
  settings.Schemas = schemaSet;   
  reader = XmlReader.Create(xmlPath, settings);   
  this.xmlDataIsValid = true; 
  // handler will set the value   
  while (reader.Read())   
  {     
    Print(reader);     
    if (!xmlDataIsValid)       
      break;   
  }   
  reader.Close();
  
  where   
  
  private void ValidationEventHandler(object sender, ValidationEventArgs args)   
  {     
    if (args.Severity == XmlSeverityType.Error)     
	{       
	  xmlDataIsValid = false; 
	  // set the flag and other things can be done here.     
	}   
  }
  

Top