Ошибка проверки DTM XmlReader для атрибута - PullRequest
0 голосов
/ 15 июля 2009

Я пытаюсь использовать XmlReader для синтаксического анализа файла и установки атрибутов каждого элемента в переменные с помощью reader.GetAttribute ("atrribute_name"), но элементы могут на самом деле иметь или не иметь этот атрибут, поэтому некоторые элементы вызывают ошибку ... Я ожидал бы, что он просто вернет ноль, когда атрибут отсутствует, но вместо этого он выдаст ошибки.

Вот полное исключение:

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

и вот содержимое XML:

<?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>

Непрозрачность может присутствовать или не присутствовать в каждом слое, а также некоторые другие атрибуты.

Ответы [ 3 ]

1 голос
/ 15 июля 2009

Да. Прочитайте документацию по XmlReader . Вы найдете, что у него есть много методов и свойств .

В частности, вы найдете свойство Item , свойство HasAttributes и свойство AttributeCount .

0 голосов
/ 15 июля 2009

Очевидно, проблема не была связана с xml вообще; вызовы GetAttribute () для атрибутов, которых не было , возвращали ноль ... но он передавался в float.Parse (), который не работает. Компилятор постоянно повторял, что это связано с XmlSchema, поэтому я искал не в том месте. >.>

Эта ошибка была такой болезненной для отладки.

0 голосов
/ 15 июля 2009

Вы уверены, что там, где у вас есть "attribute_name" в вашем примере, вы всегда передаете правильную строку? Мне кажется, что ваша ошибка может быть из-за того, что вы передаете null в GetAttribute.

...