XSD ファイルから xsd.exe を使用して C# クラスを作成しました。ルート要素は ODX と呼ばれます。次のような方法で XML ファイルを解析することにより、ODX オブジェクトを設定できるようにしたいと考えています。
namespace OdxLib
{
class Program
{
static void Main(string[] args)
{
ODX odxDocument;
using (var stream = new FileStream("C:\\MCA2014.40_NEW.odx", FileMode.Open))
{
var serializer = new XmlSerializer(typeof(ODX));
odxDocument = (ODX) serializer.Deserialize(stream);
Console.WriteLine(odxDocument.ToString());
}
}
}
}
これは私には正しいように見えます。とにかく、次のエラーが表示されます。
InvalidOperationException
Unable to generate a tempoprary class
error CS0030: Unable to convert type 'it.intecs.odx.DISABLEDAUDIENCEREFS' to 'it.intecs.odx.ENABLEDAUDIENCEREFS'.
error CS0029: Unable to implicitly convert type 'it.intecs.odx.ENABLEDAUDIENCEREFS' to 'it.intecs.odx.DISABLEDAUDIENCEREFS'.
このエラーの理由がわかりません。
これは ODX ファイルのサンプルです (完全なファイルは 150000 行以上です)。
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<ODX MODEL-VERSION="2.0.1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="odx.xsd">
<!--created by CANdelaStudio::ODXExport201.dll 7.1.101 on 2012-06-12T11:33:41+02:00-->
<?CANdelaTemplateManufacturer 12?>
<?CANdelaTemplateName New ECU 2.9?>
<?CANdelaTemplateVersion 3.0.0?>
<?CANdelaProtocolStandard UDS?>
<?ASAMOdxExport201.dll 7.1.101?>
<DIAG-LAYER-CONTAINER ID="_XXX2014_990">
<SHORT-NAME>XXX</SHORT-NAME>
<LONG-NAME>XXX</LONG-NAME>
<ADMIN-DATA>
<LANGUAGE>eng</LANGUAGE>
<DOC-REVISIONS>
<DOC-REVISION>
...
<COMPARAM-REFS>
<COMPARAM-REF ID-REF="XYZ" DOCREF="UDS_CPS" DOCTYPE="COMPARAM-SPEC">
<VALUE>500000</VALUE>
<DESC>
<p>
250000 and 500000 baud shall be supported XXX
<br/>
</p>
</DESC>
<PROTOCOL-SNREF SHORT-NAME="Diagnostic_UDS_on_CAN"/>
</COMPARAM-REF>
これは、xsd ファイルで xsd.exe によって生成されたクラスの一部です。
namespace it.intecs.odx {
using System.Xml.Serialization;
/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.1")]
[System.SerializableAttribute()]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlRootAttribute(Namespace="", IsNullable=false)]
public partial class ODX {
/// <remarks/>
[System.Xml.Serialization.XmlElementAttribute("COMPARAM-SPEC", typeof(COMPARAMSPEC), Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]
[System.Xml.Serialization.XmlElementAttribute("COMPARAM-SUBSET", typeof(COMPARAMSUBSET), Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]
[System.Xml.Serialization.XmlElementAttribute("DIAG-LAYER-CONTAINER", typeof(DIAGLAYERCONTAINER), Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]
[System.Xml.Serialization.XmlElementAttribute("ECU-CONFIG", typeof(ECUCONFIG), Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]
[System.Xml.Serialization.XmlElementAttribute("FLASH", typeof(FLASH), Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]
[System.Xml.Serialization.XmlElementAttribute("FUNCTION-DICTIONARY", typeof(FUNCTIONDICTIONARY), Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]
[System.Xml.Serialization.XmlElementAttribute("MULTIPLE-ECU-JOB-SPEC", typeof(MULTIPLEECUJOBSPEC), Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]
[System.Xml.Serialization.XmlElementAttribute("VEHICLE-INFO-SPEC", typeof(VEHICLEINFOSPEC), Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]
public ODXCATEGORY Item;
/// <remarks/>
[System.Xml.Serialization.XmlAttributeAttribute("MODEL-VERSION")]
public string MODELVERSION;
public ODX() {
this.MODELVERSION = "2.2.0";
}
}
/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.1")]
[System.SerializableAttribute()]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(TypeName="COMPARAM-SPEC")]
public partial class COMPARAMSPEC : ODXCATEGORY {
/// <remarks/>
[System.Xml.Serialization.XmlArrayAttribute("PROT-STACKS", Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]
[System.Xml.Serialization.XmlArrayItemAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified, IsNullable=false)]
public PROTSTACK[] PROTSTACKS;
}
/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.1")]
[System.SerializableAttribute()]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(TypeName="PROT-STACK")]
public partial class PROTSTACK {