Ich versuche, XmlReader zu verwenden, um eine Datei zu analysieren und die Attribute jedes Elements mithilfe von reader.GetAttribute ("attribute_name") auf Variablen festzulegen, aber die Elemente können dieses Attribut tatsächlich aufweisen oder nicht. Einige Elemente geben mir einen Fehler ... Ich hätte erwartet, dass es nur null zurückgibt, wenn das Attribut nicht vorhanden ist, stattdessen werden Fehler ausgegeben.XmlReader DTD-Validierungsfehler für ein Attribut
Hier ist die vollständige Ausnahme:
System.Xml.Schema.XmlSchemaException: The 'opacity' attribute is not declared.
at System.Xml.XmlValidatingReaderImpl.InternalValidationCallback(Object sender, ValidationEventArgs e)
at System.Xml.Schema.BaseValidator.SendValidationEvent(XmlSchemaException e, XmlSeverityType severity)
at System.Xml.Schema.BaseValidator.SendValidationEvent(XmlSchemaException e)
at System.Xml.Schema.DtdValidator.ValidateStartElement()
at System.Xml.Schema.DtdValidator.ProcessElement()
at System.Xml.Schema.DtdValidator.ValidateElement()
at System.Xml.Schema.DtdValidator.Validate()
at System.Xml.XmlValidatingReaderImpl.ProcessCoreReaderEvent()
at System.Xml.XmlValidatingReaderImpl.Read()
at Squared.Tiled.Map.Load(String filename, ContentManager content) in C:\Users\Stephen\Documents\Visual Studio 2008\Projects\Tiled\Tiled.cs:line 650
und hier ist der XML-Inhalt:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE map SYSTEM "http://mapeditor.org/dtd/1.0/map.dtd">
<map version="1.0" orientation="orthogonal" width="32" height="32" tilewidth="32" tileheight="32">
<tileset name="Untitled" firstgid="1" tilewidth="32" tileheight="32">
<image source="tiles.png"/>
</tileset>
<layer name="" width="32" height="32" opacity="0.72">
<data encoding="base64" compression="gzip">
H4sIAAAAAAAAAO3DAQkAAAwEofv+pddjKLhqqqqq6usHHB1pSAAQAAA=
</data>
</layer>
<layer name="Layer 1" width="32" height="32">
<properties>
<property name="layermeta" value="layervalue"/>
</properties>
<data encoding="base64" compression="gzip">
H4sIAAAAAAAAAO2UUQrAMAhD+7P7X3nsbwydibrJRh6UQloatbZrzbMZI9KZc5g4EB3dx9Lhn8m707+C5cP2ReX+p7ByuK55WlQz1P9u9vZFOkrVJ6pXxR/pM/TcjD+in9e/1vsHXtzV/Cfqn+GJ+2f9u+qfgX3Pf/v/hRBCiLfZAUDgXx4AEAAA
</data>
</layer>
</map>
Opazität sein kann in jeder Schicht vorhanden ist oder nicht, zusammen mit einigen anderen Attributen.
Bitte seien Sie genauer - "oder so ähnlich" lässt uns nur raten. Geben Sie den genauen Fehler und einen bestimmten Code an, damit wir das Problem identifizieren und nicht raten können. Vielen Dank. –
Stephen, was Sie tun müssen, ist die XML, die Sie analysieren wollen, zu posten und die vollständige Ausnahme zu posten (es ist kein "Fehler"). Catch die Ausnahme, dann post ex.ToString(). –
Stephen, Sie werden vielleicht merken, wie nach und nach mehr Informationen herauskommen. Vielleicht möchten Sie sich ein paar Minuten Zeit nehmen, um diesem Prozess einen Schritt voraus zu sein. Meine nächste Frage wird über den Code sein, der das XML liest (und das die fehlgeschlagene Validierung einrichtet). Nachdem Sie diesen Code veröffentlicht haben, nehmen Sie sich etwas Zeit, um herauszufinden, was _else_ Sie uns nicht sagen. –