【发布时间】:2009-07-14 20:36:54
【问题描述】:
我正在尝试使用 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>
每层中可能存在也可能不存在不透明度以及其他几个属性。
【问题讨论】:
-
请说得更具体一些——“或类似的东西”只会让我们猜测。提供确切的错误和一些代码,以便我们可以实际识别问题而不是猜测。谢谢。
-
Stephen,您需要做的是发布您尝试解析的 XML,然后发布完整的异常(这不是“错误”)。捕获异常,然后发布 ex.ToString()。
-
Stephen,您可能会注意到越来越多的信息正在逐渐浮出水面。您可能需要花几分钟时间来提前完成该过程。我的下一个问题是关于读取 XML 的代码(以及设置失败的验证)。发布该代码后,花点时间弄清楚您没有告诉我们的else。
-
一件可能无关紧要的小事 - 尝试为第一层指定一个非空名称。
-
什么都不做。在尝试 HasAttributes 之前,如果我注释掉这行 Opacity = st.GetAttribute("opacity");