2011-11-08 4 views
1

직렬화 된 데이터의 유효성을 검사하는 데 문제가 있습니다.XmlSerializer + schemaLocation에 대해 혼동했습니다.

좋아, 그래서 나는 제 3 자로부터받은 XSD 파일로 시작했다. xsd 도구를 사용하여 생성 된 C# 클래스. 그런 다음 최상위 개체에

[XmlAttribute("noNamespaceSchemaLocation", Namespace = System.Xml.Schema.XmlSchema.InstanceNamespace)] 
public string SchemaLocation = "http://localhost/schemas/AP_Transactions_10052011.xsd"; 

을 추가했습니다. 문제의 URL은 코드를 실행중인 컴퓨터에서 액세스 할 수 있습니다. 그 때 나는 제대로 지금까지 너무 좋아

<?xml version="1.0" encoding="utf-8"?> 
<BU_AP_Vendor_Invoices xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xsi:noNamespaceSchemaLocation="http://local.com/schemas/AP_Transactions_10052011.xsd"> 
... 
</BU_AP_Vendor_Invoices> 

을 생산하는 XmlSerializer을 사용하여 직렬화하고있다. 은 이제과 같이 파일을 확인하려고 : XML 파일의 모든 요소에 대해 Could not find schema information for the element 'element name' 경고 결과

public static void Validate(TextReader xmlData) 
{ 
    XmlReaderSettings settings = new XmlReaderSettings(); 
    settings.ValidationType = ValidationType.Schema; 
    settings.ValidationFlags = XmlSchemaValidationFlags.ProcessIdentityConstraints | XmlSchemaValidationFlags.ReportValidationWarnings; 
    settings.ValidationEventHandler += delegate(object sender, ValidationEventArgs args) 
    { 
     Console.WriteLine(args.Message); 
    }; 

    using (XmlReader xmlReader = XmlReader.Create(xmlData, settings)) 
     while (xmlReader.Read()) ; 
} 

. XSD가 단순히로드되지 않는다고 가정합니다.

나는 XmlReaderSettings.Schemas을보고 있었지만 독자는 어떻게 거기에 무엇을 추가해야하는지 알고 있었습니까? 내가 명시 적으로 스키마를 추가하지 않으면 마술은 간단히 일어날 것이라고 생각했지만, 효과가없는 것 같습니다.

질문이 올바르게 수행하는 방법은 무엇입니까?

답변

0

this post을 살펴보십시오. 요점은 XmlSchemaValidationFlags.ProcessSchemaLocation을 사용하는 것입니다.

+0

omg 나는 그것을 놓쳤다 고 나는 믿을 수 없다. –

관련 문제