29 messaggi dal 07 luglio 2006
Salve a tutti.
Ho costruito una stringa xml usando un xmldocument (c# 2.0 )
usando del codice simile a questo

XmlElement MySearchNode = xmlDoc.CreateElement("MySearch");
xmlDoc.AppendChild(DSRicercaRSNode);
...
XmlNode node1 = xmlDoc.SelectSingleNode("/MySearch/Objects");
XmlAttribute nameAttrib = xmlDoc.CreateAttribute("result ");
nameAttrib.Value = "012";
node1.Attributes.Append(nameAttrib);
xmlDoc.outerxml

devo validare la stringa con un XSD . Il codice che uso è il seguente :
XmlReader rdr = null;
XmlParserContext context = new XmlParserContext(null, null, "", XmlSpace.None);
XmlTextReader readerXml = new XmlTextReader(p_xml, XmlNodeType.Element, context);
XmlTextReader readerSchema = new XmlTextReader(p_xsdPath);
XmlSchema schema = new XmlSchema();
schema = XmlSchema.Read(readerSchema, new

ValidationEventHandler(Schema_ValidationEventHandler));
XmlReaderSettings ReaderSettings = new XmlReaderSettings();
ReaderSettings.ValidationType = ValidationType.Schema;
ReaderSettings.Schemas.Add(schema);
ReaderSettings.ConformanceLevel = ConformanceLevel.Fragment;
ReaderSettings.ValidationEventHandler += new

ValidationEventHandler(settings_ValidationEventHandler);
rdr = XmlReader.Create(readerXml, ReaderSettings);

questo è il contenuto dell'XSD
(una parte)
<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="MySearch">
<xs:complexType>
<xs:sequence>
<xs:element name="Objects" type="tObjects" minOccurs="0" maxOccurs="1" />
</xs:sequence>
<xs:attribute name="result" type="xs:string" />
</xs:complexType>
</xs:element>
<xs:complexType name="tObjects">
<xs:sequence>
<xs:element name="House" type="tHouse" minOccurs="0" maxOccurs="unbounded">
</xs:element>
<xs:element name="Garden" type="tGarden" minOccurs="0" maxOccurs="unbounded" />
</xs:sequence>
</xs:complexType>
....

Nota : la stringa xml che costruisco a questo aspetto
<MySearch>
<Objects result = '012' >
<House>
...
</House>
</Objects>
</MySearch>

Quando eseguo la validazione ottengo un errore :
The 'result' attribute is not declared.

Ho letto che per gestire gli attributi è necessario usare nel codice di validazione :
ReaderSettings.ValidationFlags = XmlSchemaValidationFlags.AllowXmlAttributes;

questo gestendo anche il valore attributeFormDefault="qualified"/"unqualified" nell'XSD.

Non funziona nulla !! Ottengo sempre lo stesso errore
(se non tolgo l'attributo sia dalla stringa XMl e dall'xsd invece la validazione funziona correttamente).

Qualcuno può aiutarmi ? grazie per l'attenzione ..
176 messaggi dal 04 giugno 2007
Contributi | Blog
Forse definire result come un attributo di Object invece che di My Search aiuta


Il tuo schema attuale:
...
<xs:element name=<b>"MySearch"</b>> 
<xs:complexType> 
<xs:sequence> 
<xs:element name="Objects" type="tObjects" minOccurs="0" maxOccurs="1" /> 
</xs:sequence> 
<b><xs:attribute name="result" type="xs:string" /></b>
</xs:complexType> 
</xs:element> 
...


Saluti

--Alessandro
29 messaggi dal 07 luglio 2006
Hai ragione !
In realtà ho sbagliato a riportare il codice nel post .
L'attributo è definito correttamente . Cioè deve essere un attributo
di "MySearch".
Continua però a non funzionare. (ho anche provato a spostarlo per prova su objects ...). Non è un problema di posizionamento. Sembra proprio che l'elemento "attributo" non venga riconosciuto. Deve esserci qualcosa da definire da qualche parte che non trovo. Se uso solo elementi funziona tutto ..acc...
attributeFormDefault e altri "flag2"che ho descritto in precedenza non sembrano fargli impressione ...
29 messaggi dal 07 luglio 2006
Ho risolto !

Il problema principale era il codice della validazione .
Con il codice che segue non ho più avuto problemi :

XmlReaderSettings settings = new XmlReaderSettings();
settings.Schemas.Add(null, p_xsdPath);
settings.ValidationType = ValidationType.Schema;
XmlReader rdr = XmlReader.Create(new StringReader(p_xml), settings);
settings.ValidationEventHandler += new ValidationEventHandler(settings_ValidationEventHandler);

p.s.

nelle mille prove che ho fatto l'ultimo errore sull'atributo doveva essere
relativo all'assegnazione sbagliata. Negli altri casi non segnalava l'errore nel caso l'attributo non fosse presente o avesse valori sbagliati . Quello me lo ero perso ...

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.