-1

XmlReaderを使用してファイルを解析し、reader.GetAttribute( "atrribute_name")を使用して各要素の属性を変数に設定しようとしていますが、要素には実際にその属性が存在する場合と存在しない場合があるため、一部の要素でエラーが発生します...属性が存在しない場合はnullを返すだけだと思っていましたが、代わりにエラーがスローされます。

完全な例外は次のとおりです。

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>

不透明度は、他のいくつかの属性とともに、各レイヤーに存在する場合と存在しない場合があります。

4

3 に答える 3

1

はい。XmlReaderのドキュメントを読んでください。多くのメソッドプロパティがあることがわかります。

特に、Item プロパティHasAttributes プロパティ、およびAttributeCount プロパティがあります。

于 2009-07-14T20:40:27.080 に答える
0

どうやら、この問題は xml にはまったく関係がありませんでした。存在しない属性に対する GetAttribute() 呼び出しはnull返していましたが、float.Parse() に渡されていましたが、これは機能しませんでした。コンパイラは XmlSchema に関連していると言い続けていたので、間違った場所を探していました。>.>

そのバグはデバッグするのがとても面倒でした。

于 2009-07-14T23:18:17.137 に答える
0

あなたの例で "attribute_name" がある場所では、常に有効な文字列を渡していますか? GetAttribute に null を渡しているため、エラーが発生する可能性があるようです。

于 2009-07-14T21:29:22.070 に答える