1

我已经上传了一个 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==>XML 文档中的错误 (90,7)。
System.InvalidOperationException==>找不到给定类型: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;
};

我希望(再次)有人可以帮助我,因为我没有在谷歌或这里找到解决方案。

4

1 回答 1

1

您收到的错误似乎表明某种类型不可用。查看您的 XSD,有很多类型未定义,但这可能是因为您没有包含导入和包含的 XSD 文件,所以我无法可靠地检查您的文档的有效性。

XML 本身包含错误。例如,xsi:schemaLocation不正确,它必须包含名称空间和位置的对。而不是这个:

xsi:schemaLocation="fibex4can.xsd" 

应该是这样的(假设文件确实与 XML 位于同一目录中):

xsi:schemaLocation="http://www.asam.net/xml/fbx/can fibex4can.xsd" 

我的猜测是,您文档的明显错误是无法解析的原因。基本上,在处理 XML 时,您必须非常严格(与任何编程语言一样)。如果您告诉处理器验证文档,那么架构必须可用,它们本身必须有效,任何相关架构必须是可定位的,最后,XML 文档必须对这些架构有效。符合标准的处理器(如使用 .NET 的处理器)必须遵守这些和其他 XML 规则,并且当 XML 格式不正确或无效时,它们必须抛出错误并停止解析文档。

于 2010-08-04T18:37:56.280 回答