当前位置: 首页 > news >正文

ARXML处理 - C#的解析代码(一)

目的

本文介绍通过AUTOSAR组织提供的xsd文件,自动生成对应的C#解析代码的框架。

自动生成方法:Microsoft SDKs\Windows\v7.0A\bin\xsd.exe

命令:xsd.exe AUTOSAR_4-0-3.xsd /c /l:CS /n:AUTOSAR4

AUTOSAR_4-0-3.xsd 是需要生成代码的xsd文件。

在C#环境下固定几个版本没有问题,其他AUTOSAR版本的xsd会在生成过程中产生循环组引用错误,不能生成代码。

适用版本

AUTOSAR版本XSD生成的C#库文件
4.0.3

【免费】AUTOSAR4.0.3的ARXML文件解析资源-CSDN文库

4.2.2【免费】AUTOSAR4.2.2的ARXML文件解析资源-CSDN文库
4.4.0

解析库的使用方法

// XmlFilePath: ARXML 文件路径
public static AUTOSAR ReadXmlToClass(string XmlFilePath)
{XmlSerializer xs = new XmlSerializer(typeof(AUTOSAR));using (FileStream fs = new FileStream(XmlFilePath, FileMode.Open)){return (AUTOSAR)xs.Deserialize(fs);}
}

生成的代码

代码头

以下是生成的代码头部部分,我们后续需要用到这个命名空间和类。当然直接生成的代码还是需要做补充,修改等操作。后续篇章会陆续进行介绍。

//------------------------------------------------------------------------------
// <auto-generated>
//     此代码由工具生成。
//     运行库版本:2.0.50727.3082
//
//     对此文件的更改可能会导致不正确的行为,并且如果
//     重新生成代码,这些更改将会丢失。
// </auto-generated>
//------------------------------------------------------------------------------// 
// This source code was auto-generated by xsd, Version=2.0.50727.3038.
// 
namespace AUTOSAR4 
{using System.Xml.Serialization;using System.Collections.ObjectModel;using System;/// <remarks/>[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "2.0.50727.3038")][System.SerializableAttribute()][System.Diagnostics.DebuggerStepThroughAttribute()][System.ComponentModel.DesignerCategoryAttribute("code")][System.Xml.Serialization.XmlTypeAttribute(Namespace="http://autosar.org/schema/r4.0")][System.Xml.Serialization.XmlRootAttribute(Namespace="http://autosar.org/schema/r4.0",IsNullable=false)][System.Xml.Serialization.XmlSchemaProvider("http://autosar.org/schema/r4.0 AUTOSAR_4-0-3.xsd")]public partial class AUTOSAR {# 代码较大,此处省略.....}
}

配置模版关键类

AUTOSAR的ECU配置分成两个模型,即用来定义配置模版(M1)和配置数据(M0)。每个应用代码都是用配置数据来表示,配置数据里会引用到配置模版中。配置数据的解析在后续章节说明

如下图所示,这个配置数据是参考标准库的配置模版进行使用的。

        <ECUC-MODULE-CONFIGURATION-VALUES UUID="5327e39a-f8d9-423c-ba83-53c8806e66f9"><SHORT-NAME>CanIf</SHORT-NAME><DEFINITION-REF DEST="ECUC-MODULE-DEF">/AUTOSAR/EcucDefs/CanIf</DEFINITION-REF>

模块 MODULE (ECUCMODULEDEF)

该类用于处理模块,如CanIf, Com等。

    /// <remarks/>[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "2.0.50727.3038")][System.SerializableAttribute()][System.Diagnostics.DebuggerStepThroughAttribute()][System.ComponentModel.DesignerCategoryAttribute("code")][System.Xml.Serialization.XmlTypeAttribute(TypeName="ECUC-MODULE-DEF", Namespace="http://autosar.org/schema/r4.0")]public partial class ECUCMODULEDEF {/// <remarks/>[System.Xml.Serialization.XmlArrayItemAttribute(typeof(ECUCCHOICECONTAINERDEF), IsNullable=false)][System.Xml.Serialization.XmlArrayItemAttribute(typeof(ECUCPARAMCONFCONTAINERDEF), IsNullable=false)]# 容器集合,保护多个配置集;可以是参数容器,也可以是选择容器public object[] CONTAINERS {get {return this.cONTAINERSField;}set {this.cONTAINERSField = value;}}}

参数容器(ECUCPARAMCONFCONTAINERDEF)

相当于配置的文件夹

    /// <remarks/>[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "2.0.50727.3038")][System.SerializableAttribute()][System.Diagnostics.DebuggerStepThroughAttribute()][System.ComponentModel.DesignerCategoryAttribute("code")][System.Xml.Serialization.XmlTypeAttribute(TypeName="ECUC-PARAM-CONF-CONTAINER-DEF", Namespace="http://autosar.org/schema/r4.0")]public partial class ECUCPARAMCONFCONTAINERDEF {/// <remarks/>[System.Xml.Serialization.XmlArrayItemAttribute(typeof(ECUCADDINFOPARAMDEF), IsNullable=false)][System.Xml.Serialization.XmlArrayItemAttribute(typeof(ECUCBOOLEANPARAMDEF), IsNullable=false)][System.Xml.Serialization.XmlArrayItemAttribute(typeof(ECUCENUMERATIONPARAMDEF), IsNullable=false)][System.Xml.Serialization.XmlArrayItemAttribute(typeof(ECUCFLOATPARAMDEF), IsNullable=false)][System.Xml.Serialization.XmlArrayItemAttribute(typeof(ECUCFUNCTIONNAMEDEF), IsNullable=false)][System.Xml.Serialization.XmlArrayItemAttribute(typeof(ECUCINTEGERPARAMDEF), IsNullable=false)][System.Xml.Serialization.XmlArrayItemAttribute(typeof(ECUCLINKERSYMBOLDEF), IsNullable=false)][System.Xml.Serialization.XmlArrayItemAttribute(typeof(ECUCMULTILINESTRINGPARAMDEF), IsNullable=false)][System.Xml.Serialization.XmlArrayItemAttribute(typeof(ECUCSTRINGPARAMDEF), IsNullable=false)]# 配置参数集合public object[] PARAMETERS {get {return this.pARAMETERSField;}set {this.pARAMETERSField = value;}}/// <remarks/>[System.Xml.Serialization.XmlArrayItemAttribute(typeof(ECUCCHOICEREFERENCEDEF), IsNullable=false)][System.Xml.Serialization.XmlArrayItemAttribute(typeof(ECUCFOREIGNREFERENCEDEF), IsNullable=false)][System.Xml.Serialization.XmlArrayItemAttribute(typeof(ECUCINSTANCEREFERENCEDEF), IsNullable=false)][System.Xml.Serialization.XmlArrayItemAttribute(typeof(ECUCREFERENCEDEF), IsNullable=false)][System.Xml.Serialization.XmlArrayItemAttribute(typeof(ECUCSYMBOLICNAMEREFERENCEDEF), IsNullable=false)]# 参考参数集合public object[] REFERENCES {get {return this.rEFERENCESField;}set {this.rEFERENCESField = value;}}/// <remarks/>[System.Xml.Serialization.XmlArrayAttribute("SUB-CONTAINERS")][System.Xml.Serialization.XmlArrayItemAttribute(typeof(ECUCCHOICECONTAINERDEF), IsNullable=false)][System.Xml.Serialization.XmlArrayItemAttribute(typeof(ECUCPARAMCONFCONTAINERDEF), IsNullable=false)]# 子容器集合,可以是参数容器,也可以是选择容器public object[] SUBCONTAINERS {get {return this.sUBCONTAINERSField;}set {this.sUBCONTAINERSField = value;}}}

选择容器(ECUCCHOICECONTAINERDEF)

可以选择不同类型的参数容器

    /// <remarks/>[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "2.0.50727.3038")][System.SerializableAttribute()][System.Diagnostics.DebuggerStepThroughAttribute()][System.ComponentModel.DesignerCategoryAttribute("code")][System.Xml.Serialization.XmlTypeAttribute(TypeName="ECUC-CHOICE-CONTAINER-DEF", Namespace="http://autosar.org/schema/r4.0")]public partial class ECUCCHOICECONTAINERDEF {/// <remarks/>[System.Xml.Serialization.XmlArrayItemAttribute(IsNullable=false)]# 可选的参数容器集合,AUTOSAR配置过程中只能在这个集合中选择一个public ECUCPARAMCONFCONTAINERDEF[] CHOICES {get {return this.cHOICESField;}set {this.cHOICESField = value;}}
}

相关文章:

ARXML处理 - C#的解析代码(一)

目的 本文介绍通过AUTOSAR组织提供的xsd文件&#xff0c;自动生成对应的C#解析代码的框架。 自动生成方法&#xff1a;Microsoft SDKs\Windows\v7.0A\bin\xsd.exe 命令&#xff1a;xsd.exe AUTOSAR_4-0-3.xsd /c /l:CS /n:AUTOSAR4 AUTOSAR_4-0-3.xsd 是需要生成代码的xsd文…...

OJ 栓奶牛【C】【Python】【二分算法】

题目 算法思路 要求的距离在最近木桩与最远木桩相隔距离到零之间&#xff0c;所以是二分法 先取一个中间值&#xff0c;看按照这个中间值可以栓多少奶牛&#xff0c;再与输入奶牛数比较&#xff0c;如果大于等于&#xff0c;则增大距离&#xff0c;注意这里等于也是增大距离…...

Spring6-单元测试:JUnit

1. 概念 在进行单元测试时&#xff0c;特别是针对使用了Spring框架的应用程序&#xff0c;我们通常需要与Spring容器交互以获取被测试对象及其依赖。传统做法是在每个测试方法中手动创建Spring容器并从中获取所需的Bean。以下面的两行常见代码为例&#xff1a; ApplicationCo…...

ubuntu系统安装k8s1.28精简步骤

目录 一、规划二、环境准备2.1 配置apt仓库配置系统基本软件仓库配置k8s软件仓库安装常用软件包 2.2 修改静态ip、ntp时间同步、主机名、hosts文件、主机免密2.3 内核配置2.4 关闭防火墙、selinux、swap2.5 安装软件安装docker安装containerd安装k8s软件包 三、安装配置k8s3.1 …...

探讨Java和Go语言的缺点

文章目录 Java的缺点Go语言的缺点 通常我们都会讨论Java和GO的优点&#xff0c;如果讨论缺点往往能让人们更清楚优点的重要性&#xff0c;Java和Go的缺点或许往往就是对方优点所在 Java的缺点 冗长的代码&#xff1a;相较于一些现代编程语言&#xff0c;Java 的语法相对冗长&am…...

短剧在线搜索PHP网站源码

源码简介 短剧在线搜索PHP网站源码&#xff0c;自带本地数据库500数据&#xff0c;共有6000短剧视频&#xff0c;与短剧猫一样。 搭建环境 PHP 7.3 Mysql 5.6 安装教程 1.上传源码到网站目录中 2.修改【admin.php】中&#xff0c; $username ‘后台登录账号’; $passwor…...

Python map遍历

在Python中&#xff0c;map 函数是一个内置函数&#xff0c;它将指定的函数应用于给定序列&#xff08;如列表、元组等&#xff09;的每个项&#xff0c;并返回一个迭代器&#xff0c;该迭代器包含所有项经过指定函数处理后的结果。 ### map 函数的基本用法 map 函数的语法如…...

数据结构—红黑树

红黑树介绍 红黑树&#xff08;Red Black Tree&#xff09;是一种自平衡二叉查找树。由于其自平衡的特性&#xff0c;保证了最坏情形下在 O(logn) 时间复杂度内完成查找、增加、删除等操作&#xff0c;性能表现稳定。 在 JDK 中&#xff0c;TreeMap、TreeSet 以及 JDK1.8 的 …...

MES实施之工控机和电脑的选择

在MES项目实施过程中,经常会碰到工控机和电脑的选型问题,那么他们的区别是什么? 1、控机和普通个人电脑(PC)相比,具有以下几个区别: 1.运行环境不同:工控机通常需要在各种恶劣的工业环境中运行,如高温、高湿、强电磁干扰等,因此需要具有防尘、防水、抗干扰等特点。而…...

京东云服务器4核8G主机租用价格418元一年,1899元3年

京东云轻量云主机4核8G服务器租用价格418元一年&#xff0c;1899元3年&#xff0c;配置为&#xff1a;轻量云主机4C8G-180G SSD系统盘-5M带宽-500G月流量&#xff0c;京东云主机优惠活动 yunfuwuqiba.com/go/jd 可以查看京东云服务器详细配置和精准报价单&#xff0c;活动打开如…...

【多模态融合】MetaBEV 解决传感器故障 3D检测、BEV分割任务

前言 本文介绍多模态融合中&#xff0c;如何解决传感器故障问题&#xff1b;基于激光雷达和相机&#xff0c;融合为BEV特征&#xff0c;实现3D检测和BEV分割&#xff0c;提高系统容错性和稳定性。 会讲解论文整体思路、模型框架、论文核心点、损失函数、实验与测试效果等。 …...

[通俗易懂]《动手学强化学习》学习笔记1-第1章 初探强化学习

文章目录 前言第1章 初探强化学习1.1 简介序贯决策&#xff08;sequential decision making&#xff09;任务&#xff1a;强化学习与有监督学习或无监督学习的**区别**&#xff1a;改变未来 1.2 什么是强化学习环境交互与有监督学习的区别1&#xff1a;改变环境 &#xff08;说…...

centOS如何升级python

centOS下升级python版本的详细步骤 1、可利用linux自带下载工具wget下载&#xff0c;如下所示&#xff1a; 笔者安装的是最小centos系统&#xff0c;所以使用编译命令前&#xff0c;必须安装wget服务&#xff0c;读者如果安装的是界面centos系统&#xff0c;或者使用过编译工具…...

【MYSQL锁】透彻地理解MYSQL锁

&#x1f525;作者主页&#xff1a;小林同学的学习笔录 &#x1f525;mysql专栏&#xff1a;小林同学的专栏 目录 1.锁 1.1 概述 1.2 全局锁 1.2.1 语法 1.2.1.1 加全局锁 1.2.1.2 数据备份 1.2.1.3 释放锁 1.2.1.4 特点 1.2.1.5 演示 1.3 表级锁 1.3.1 介绍 …...

【静态分析】静态分析笔记01 - Introduction

参考&#xff1a; BV1zE411s77Z [南京大学]-[软件分析]课程学习笔记(一)-introduction_南京大学软件分析笔记-CSDN博客 ------------------------------------------------------------------------------------------------------ 1. program language and static analysis…...

使用的sql

根据CODE去重 SELECT * FROM ( SELECT count( camera_code ) AS count, camera_code FROM n_camera_basic GROUP BY camera_code ) t WHERE t.count >1 DELETE FROM n_camera_basic WHERE camera_id NOT IN (SELECT dt.minno…...

【ZZULIOJ】1052: 数列求和4(Java)

目录 题目描述 输入 输出 样例输入 Copy 样例输出 Copy code 题目描述 输入n和a&#xff0c;求aaaaaa…aa…a(n个a)&#xff0c;如当n3,a2时&#xff0c;222222的结果为246 输入 包含两个整数&#xff0c;n和a,含义如上述&#xff0c;你可以假定n和a都是小于10的非负整…...

【Linux】tcpdump P3 - 过滤和组织返回信息

文章目录 基于TCP标志的过滤器格式化 -X/-A额外的详细选项按协议(udp/tcp)过滤低详细输出 -q时间戳选项 本文继续展示帮助你过滤和组织tcpdump返回信息的功能。 基于TCP标志的过滤器 可以根据各种TCP标志来过滤TCP流量。这里是一个基于tcp-ack标志进行过滤的例子。 # tcpdump…...

vscode免费登录ssh ,linux git配置免密码

1、vscode远程ssh免密 在windows下生成密钥 , cmd窗口下执行 ssh-keygen -t rsa 在C:\Users\xxxx\.ssh目录下生成 在linux下面 cd .ssh 创建authorized_keys 文件&#xff0c; 把之前windows下生成的 id_rsa.pub内容复制进去 2、gitlab 配置。 在linux下面 ssh-keygen -t rs…...

Netty 心跳(heartbeat)——服务源码剖析(上)(四十一)

剖析目的 Netty 作为一个网络框架&#xff0c;提供了诸多功能&#xff0c;比如编码解码等&#xff0c;Netty 还提供了非常重要的一个服务----心跳机制 heartbeat.通过心跳检査对方是否有效,这是 RPC 框架中是必不可少的功能。下面我们分析一下 Netty 内部心跳服务源码实现。 源…...

[特殊字符] 智能合约中的数据是如何在区块链中保持一致的?

&#x1f9e0; 智能合约中的数据是如何在区块链中保持一致的&#xff1f; 为什么所有区块链节点都能得出相同结果&#xff1f;合约调用这么复杂&#xff0c;状态真能保持一致吗&#xff1f;本篇带你从底层视角理解“状态一致性”的真相。 一、智能合约的数据存储在哪里&#xf…...

RocketMQ延迟消息机制

两种延迟消息 RocketMQ中提供了两种延迟消息机制 指定固定的延迟级别 通过在Message中设定一个MessageDelayLevel参数&#xff0c;对应18个预设的延迟级别指定时间点的延迟级别 通过在Message中设定一个DeliverTimeMS指定一个Long类型表示的具体时间点。到了时间点后&#xf…...

srs linux

下载编译运行 git clone https:///ossrs/srs.git ./configure --h265on make 编译完成后即可启动SRS # 启动 ./objs/srs -c conf/srs.conf # 查看日志 tail -n 30 -f ./objs/srs.log 开放端口 默认RTMP接收推流端口是1935&#xff0c;SRS管理页面端口是8080&#xff0c;可…...

WordPress插件:AI多语言写作与智能配图、免费AI模型、SEO文章生成

厌倦手动写WordPress文章&#xff1f;AI自动生成&#xff0c;效率提升10倍&#xff01; 支持多语言、自动配图、定时发布&#xff0c;让内容创作更轻松&#xff01; AI内容生成 → 不想每天写文章&#xff1f;AI一键生成高质量内容&#xff01;多语言支持 → 跨境电商必备&am…...

Rust 异步编程

Rust 异步编程 引言 Rust 是一种系统编程语言,以其高性能、安全性以及零成本抽象而著称。在多核处理器成为主流的今天,异步编程成为了一种提高应用性能、优化资源利用的有效手段。本文将深入探讨 Rust 异步编程的核心概念、常用库以及最佳实践。 异步编程基础 什么是异步…...

return this;返回的是谁

一个审批系统的示例来演示责任链模式的实现。假设公司需要处理不同金额的采购申请&#xff0c;不同级别的经理有不同的审批权限&#xff1a; // 抽象处理者&#xff1a;审批者 abstract class Approver {protected Approver successor; // 下一个处理者// 设置下一个处理者pub…...

CVE-2020-17519源码分析与漏洞复现(Flink 任意文件读取)

漏洞概览 漏洞名称&#xff1a;Apache Flink REST API 任意文件读取漏洞CVE编号&#xff1a;CVE-2020-17519CVSS评分&#xff1a;7.5影响版本&#xff1a;Apache Flink 1.11.0、1.11.1、1.11.2修复版本&#xff1a;≥ 1.11.3 或 ≥ 1.12.0漏洞类型&#xff1a;路径遍历&#x…...

SQL慢可能是触发了ring buffer

简介 最近在进行 postgresql 性能排查的时候,发现 PG 在某一个时间并行执行的 SQL 变得特别慢。最后通过监控监观察到并行发起得时间 buffers_alloc 就急速上升,且低水位伴随在整个慢 SQL,一直是 buferIO 的等待事件,此时也没有其他会话的争抢。SQL 虽然不是高效 SQL ,但…...

人工智能--安全大模型训练计划:基于Fine-tuning + LLM Agent

安全大模型训练计划&#xff1a;基于Fine-tuning LLM Agent 1. 构建高质量安全数据集 目标&#xff1a;为安全大模型创建高质量、去偏、符合伦理的训练数据集&#xff0c;涵盖安全相关任务&#xff08;如有害内容检测、隐私保护、道德推理等&#xff09;。 1.1 数据收集 描…...

elementUI点击浏览table所选行数据查看文档

项目场景&#xff1a; table按照要求特定的数据变成按钮可以点击 解决方案&#xff1a; <el-table-columnprop"mlname"label"名称"align"center"width"180"><template slot-scope"scope"><el-buttonv-if&qu…...