1

読み込もうとしているXMLファイルと対応するXSDファイルの両方を含むZIPファイルをhttp://www.bonnland.de/FIBEX.zipにアップロードしました。

XmlSerializerを使用して次のXML(フラグメント)を逆シリアル化しようとしています。そうしていると、エラーが発生します:(ドイツ語であるため申し訳ありませんが、イタリック体で大まかな翻訳を行います)

System.InvalidOperationException ==> Fehler im XML-ドキュメント(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 に答える