2014-05-12 10 views
5

ho uno schema con i seguenti attributi:XML di convalida del documento parametro targetNamespace errore

<xs:schema id="FooFile" 
    xmlns:xs="http://www.w3.org/2001/XMLSchema" 
    targetNamespace="http://Foostandards.com"  
    elementFormDefault="qualified"  
    xmlns="http://Foostandards.com"> 

Ho un costruttore di XDocument con i seguenti attributi sul tag root (foofile).

XDocument Foo2Xml = new XDocument(
    new XDeclaration("1.0", "utf-8", "yes"), 
    new XComment("Foo2 file specifications implemented in xml"), 
     new XElement("FooFile", 
     new XAttribute(XNamespace.Xmlns + "xsi", "http://Foostandards.com"), 
     new XAttribute(xsi + "schemaLocation", "http://Foostandards.com FooFile.xsd"), etc 

ottengo il seguente errore registrato quando ho eseguito il metodo XDocument Convalida:

"il parametro targetNamespace '' dovrebbe essere lo stesso valore del targetNamespace 'http://Foostandards.com' dello schema."

Ho il parametro targetNamespace nello schema e non riesco a trovare informazioni che mi dicano che appartiene anche agli attributi del documento XML (o come codificarlo).

+2

Il vostro XML in realtà hanno i caratteri '\" 'In esso? In caso contrario, quindi rimuoverli dal tuo post. –

risposta

12

L'ho capito. L'errore non aveva nulla a che fare con lo schema oi parametri di XDocument. Era il metodo Add per l'oggetto SchemaSet che aveva un valore nullo per il parametro targetNamespace.

Il mio codice:

XmlSchemaSet schemas = new XmlSchemaSet(); 
schemas.Add("", XmlReader.Create(new StringReader(xsd))); 

Dove XSD è una rappresentazione di stringa del mio schema. Nota "" come il primo parametro del metodo Aggiungi.

codice avrebbe dovuto essere:

XmlSchemaSet schemas = new XmlSchemaSet(); 
schemas.Add("http://Foostandards.com", XmlReader.Create(new StringReader(xsd))); 
0

Mentre l'aggiunta del XmlSchemaSet, dobbiamo mettere la "targetNamespace" dal file XSD. Ecco la seguente riga di codice.

file XSD:

<?xml version="1.0" encoding="utf-8"?> 
<xs:schema xmlns:tns="XXX" elementFormDefault="qualified" 
     targetNamespace="XXX" xmlns:xs="http://www.w3.org/2001/XMLSchema"> 

C# Codice:

var schema = new XmlSchemaSet(); 
schema.Add("XXX", "XSD file path"); 

Dove XXX: targetNamespace da file XSD

Problemi correlati