我上传了一个ZIP文件,其中包含我正在尝试阅读的XML文件和相应的XSD文件http://www.bonnland.de/FIBEX.zip
我正在尝试使用XmlSerializer反序列化以下XML(片段)。这样做的时候我得到了错误:(抱歉它是德语我会在斜体中给出一个粗略的翻译)
System.InvalidOperationException==>Fehler im XML-Dokument (90,7). System.InvalidOperationException==>Der angegebene Typ wurde nicht erkannt: Name='CONTROLLER-TYPE', Namespace='http://www.asam.net/xml/fbx/can', bei .
这可以翻译为:
System.InvalidOperationException==>error in XML document (90,7). System.InvalidOperationException==>the given type could not be found: Name='CONTROLLER-TYPE', Namespace='http://www.asam.net/xml/fbx/can', at
这是源文件:
<fx:ECU ID="ecuSpeedControl">
<ho:SHORT-NAME>SpeedControl</ho:SHORT-NAME>
<ho:DESC>ECU controlling drive speed</ho:DESC>
<fx:CONTROLLERS>
<fx:CONTROLLER xsi:type="can:CONTROLLER-TYPE" ID="ctrlSpeedControl">
<ho:SHORT-NAME>ctrlSpeedControl</ho:SHORT-NAME>
<ho:DESC>CAN controller of ECU</ho:DESC>
<fx:CHIP-NAME>SJA1000</fx:CHIP-NAME>
<can:TIME-SEG0>11</can:TIME-SEG0>
<can:TIME-SEG1>4</can:TIME-SEG1>
<can:SYNC-JUMP-WIDTH>2</can:SYNC-JUMP-WIDTH>
<can:NUMBER-OF-SAMPLES>1</can:NUMBER-OF-SAMPLES>
</fx:CONTROLLER>
</fx:CONTROLLERS>
</fx:ECU>
根元素是:
<fx:FIBEX xmlns:fx="http://www.asam.net/xml/fbx" xmlns:ho="http://www.asam.net/xml"
xmlns:can="http://www.asam.net/xml/fbx/can" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="fibex4can.xsd" VERSION="3.1.0">
此片段的类定义是:
public ref class FIBEXECU : AbstractFIBEXNode, IGenericContainable
{
public:
ref class ControllersContainer : FIBEXGenericContainer<FIBEXController^>{
public:
[XmlElement("CONTROLLER")]
property array<FIBEXController^>^ ControllerObjs {
array<FIBEXController^>^ get() { return Children;}
void set(array<FIBEXController^>^ value) { Children = value;}
}
};
[XmlAttribute("ID")]
virtual property String^ ID;
[XmlElement("SHORT-NAME", Namespace="http://www.asam.net/xml")]
property String^ ShortName;
[XmlElement("CONTROLLERS")]
property ControllersContainer^ Controllers;
};
我希望(再次)有人可以帮助我,因为我没有在谷歌或这里找到解决方案。
答案 0 :(得分:1)
您得到的错误似乎表明某种类型不可用。通过XSD查看,有一些类型未定义,但这可能是因为您没有包含导入和包含的XSD文件,因此我无法可靠地检查文档的有效性。
XML本身包含错误。例如,xsi:schemaLocation
不正确,它必须包含名称空间和位置的对。而不是:
xsi:schemaLocation="fibex4can.xsd"
它应该是这样(假设文件确实与XML在同一目录中):
xsi:schemaLocation="http://www.asam.net/xml/fbx/can fibex4can.xsd"
我的猜测是,文档的明显错误是无法解析的原因。基本上,在处理XML时,您必须非常严格(与任何编程语言一样)。如果您告诉处理器验证文档,那么Schema必须可用,它们本身必须是有效的,任何相关的模式必须是可定位的,最后,XML文档必须对这些模式有效。合规处理器(如使用.NET的处理器)必须遵守XML的这些规则和其他规则,并且当XML格式不正确或无效时,它们必须抛出错误并停止解析文档。