我正在尝试使用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>
不透明度可能会也可能不会出现在每个图层中,还有其他一些属性。
答案 0 :(得分:1)
是。阅读XmlReader的文档。您会发现它有很多methods和properties。
特别是,您会找到Item property,HasAttributes property和AttributeCount property。
答案 1 :(得分:0)
你确定在你的例子中你有“attribute_name”的地方总是传递一个有效的字符串吗?在我看来,您的错误可能是因为您将null传递给GetAttribute。
答案 2 :(得分:0)
显然这个问题根本不是xml相关的; GetAttribute()调用不存在的属性 返回null ...但它传递给float.Parse(),这不起作用。编译器一直告诉我它与XmlSchema有关,所以我在找错了地方。 &GT;&GT;
这个bug很难调试。