我有一个XmlSerializer对象,我已经为UnknownElement和UnknownAttribute事件添加了2个事件处理程序,如下所示:
XmlSerializer xs = new XmlSerialiser(typeof(MyClass));
xs.UnknownAttribute += new XmlAttributeEventHandler(xs_UnknownAttribute);
xs.UnknownElement += new XmlElementEventHandler(xs_UnknownAttribute);
这些事件处理程序中的每一个基本上都做同样的事情,它们打印出导致问题的节点名称或属性名称。
但由于某种原因,会抛出InvalidOperationException,说xml文档中有错误。我认为这些错误会被我的事件所捕获?
更新
例外情况是:
异常是:Unhandled Exception:System.InvalidOperationException:XML文档中存在错误(5,110)。
有一个XmlException类型的InnerException,它指出第5行的'MyTag'开始标记与'AnotherTag'的结束标记不匹配。第5行,第110位。
答案 0 :(得分:1)
如果没有看到MyClass
的定义以及您尝试阅读的XML,很难给出明确的答案。也就是说,异常的文本非常明显,XML标记格式错误,而不是包含未知元素或属性,例如:
<AnotherTag>
<MyTag>
</AnotherTag> <--- This should be </MyTag>
</MyTag> <--- This should be </AnotherTag>
UnknownAttribute / UnknownElement处理程序不会捕获它,因为XML的结构是有趣的错误。在将XML文档成功解析为节点树,子节点,属性等之后,才能调用这些事件。
进一步解释一下UnknownAttribute / UnknownElement;如果您的类/ XML只允许包含名为 Field1 和 Field2 的元素,那么如果您有一个名为 Field3的元素>,您会发现会引发UnknownElement事件你的XML中的strong>。引发InvalidOperationException
因为XML不是XML,引发了UnknownElement
事件,因为XML中的元素是意外的,尽管XML在其他方面是有效的。
答案 1 :(得分:0)
您正在处理的两个事件与XML文档结构中的错误无关。
一旦发布特定异常,我会尽力帮助您解决具体问题。您甚至可能需要发布XML。
根据您发布的部分异常的外观,您的文档似乎是无效的XML(不匹配的标记)。没有办法发现这种捕获异常的缺点。