2013-06-18 2 views
3

Используя следующий MSDN документацию я проверить файл XML против схемы: http://msdn.microsoft.com/en-us/library/8f0h7att%28v=vs.100%29.aspxПроверка XML-против встроенного XSD в C#

Это прекрасно работает до тех пор, как XML содержит ссылку на местоположение схемы или инлайн схему , Возможно ли внедрить схему «жестко закодированную» в приложение, то есть XSD не будет находиться в виде файла и, следовательно, XML не должен ссылаться на него?

Я говорю о чем-то вроде:

  1. нагрузки XML быть подтверждено (без местоположения схемы).
  2. Загрузить XSD как ресурс или что-то еще.
  3. Сделайте валидацию.

ответ

3

Попробуйте это:

Stream objStream = objFile.PostedFile.InputStream; 

// Open XML file 
XmlTextReader xtrFile = new XmlTextReader(objStream); 

// Create validator 
XmlValidatingReader xvrValidator = new XmlValidatingReader(xtrFile); 
xvrValidator.ValidationType = ValidationType.Schema; 

// Add XSD to validator 
XmlSchemaCollection xscSchema = new XmlSchemaCollection(); 
xscSchema.Add("xxxxx", Server.MapPath(@"/zzz/XSD/yyyyy.xsd")); 
xvrValidator.Schemas.Add(xscSchema); 

try 
{ 
    while (xvrValidator.Read()) 
    { 
    } 
} 
catch (Exception ex) 
{ 
    // Error on validation 
} 
0

Да, это возможно. Прочтите файл встроенного ресурса до string, а затем создайте объект XmlSchemaSet, добавив в него схему. Используйте его в своем XmlReaderSettings при проверке.

1

Свойство XmlReaderSettings.Schemas можно использовать, чтобы указать, какая схема использовать. Схема может быть загружена из потока.

var schemaSet = new XmlSchemaSet(); 
schemaSet.Add("http://www.contoso.com/books", new XmlTextReader(xsdStream)); 

var settings = new XmlReaderSettings(); 
settings.Schemas = schemaSet; 

using (var reader = XmlReader.Create(xmlStream, settings)) 
{ 
    while (reader.Read()); 
} 
Смежные вопросы