KumarAbhishekJaiswal Ответов: 1

Как разобрать сгенерированный matlab XML на объекты класса В C#


Дорогие Все

Я сгенерировал XML-файл из модели Simulink (Matlab 2017b). Идея состоит в том, чтобы получить свойства модели из XML в объекты класса (я использую C# .Net 4.5). Ниже в сгенерированном XML-файле.

<?xml version="1.0" encoding="utf-8"?>
<ModelInformation Version="1.0">
  <Model Name="MatlabToJenkinsIntegrationSample">
    <P Name="Version">9.0</P>
    <P Name="SavedCharacterEncoding">windows-1252</P>
    <GraphicalInterface>
      <P Name="NumRootInports">3</P>
      <Inport Name="Input1">
        <P Name="BusObject"/>
        <P Name="OutputFunctionCall">off</P>
        <P Name="SampleTime">-1</P>
        <P Name="UnitExpr">inherit</P>
      </Inport>
      <Inport Name="Input2 ">
        <P Name="BusObject"/>
        <P Name="OutputFunctionCall">off</P>
        <P Name="SampleTime">-1</P>
        <P Name="UnitExpr">inherit</P>
      </Inport>
      <Inport Name="MultiplicationFactor">
        <P Name="BusObject"/>
        <P Name="OutputFunctionCall">off</P>
        <P Name="SampleTime">-1</P>
        <P Name="UnitExpr">inherit</P>
      </Inport>
      <P Name="NumRootOutports">1</P>
      <Outport Name="Result">
        <P Name="BusObject"/>
        <P Name="BusOutputAsStruct">off</P>
        <P Name="UnitExpr">inherit</P>
      </Outport>
      <P Name="ParameterArgumentNames"/>
      <P Name="ComputedModelVersion">1.4</P>
      <P Name="NumModelReferences">0</P>
      <P Name="NumTestPointedSignals">0</P>
      <P Name="NumProvidedFunctions">0</P>
      <P Name="NumRequiredFunctions">0</P>
      <P Name="NumResetEvents">0</P>
      <P Name="HasInitializeEvent">0</P>
      <P Name="HasTerminateEvent">0</P>
      <P Name="IsExportFunctionModel">0</P>
      <P Name="NumParameterArguments">0</P>
      <P Name="NumExternalFileReferences">0</P>
      <P Name="OrderedModelArguments">1</P>
    </GraphicalInterface>
  </Model>
</ModelInformation>


Проблема, с которой я сталкиваюсь, заключается в том, что он не похож ни на один традиционный XML, который я видел.

Тем не менее вопросы остаются, я читаю их в объектах. Я посмотрел на решение проблемы ([Решение]) но он не подходил для такого рода XML. Пожалуйста, предложите способ.

Что я уже пробовал:

I created classes to get the objects as shown below

<pre>public class Model
{
        
    public string Name { get; set; }
      
    public string Version { get; set; }
        
    public string SavedCharacterEncoding { get; set; }
       
    public GraphicalInterface TheGraphicalInterface { get; set; }
}


public class GraphicalInterface
{
    public List<Port> InPorts { get; set; }

    public List<Port> OutPorts { get; set; }
}


public class Port
{
       
    public string OutputFunctionCall { get; set; }
      
    public double SampleTime { get; set; }
   
    public string UnitExpression { get; set; }
}

Tomas Takac

Вы правы, это выглядит не очень традиционно. Можете ли вы настроить способ генерации XML-кода? Может быть, есть параметр, который управляет этим.

KumarAbhishekJaiswal

@tomas, как бы я хотел это сделать. Я связался с Mathworks для этого. Жду их ответа. Теперь я понятия не имею, что делать.

Kornfeld Eliyahu Peter

Я бы сказал, что вы должны преобразовать его в более "традиционный" XML с помощью XSLT...
Насколько я вижу, все, что вам нужно изменить, - это все эти элементы <P> (представляющие свойства?)
от:
&ЛТ;п Наименование="HasTerminateEvent"и gt;0&ЛТ;/П&ГТ;
к:
<HasTerminateEvent value="0"/>

Tomas Takac

Лучшая идея. Я думаю, ему также нужно обернуть коллекции как <inports><inport/><inport/>....</inports>

KumarAbhishekJaiswal

но есть ли инструмент для этого? потому что я не осознаю этого. Пожалуйста предложите

Tomas Takac

см. раздел ms docs для Класс XslCompiledTransform[^]

1 Ответов

Рейтинг:
1

Maciej Los

он не похож ни на один традиционный XML


Ты ошибаешься. Этот xml имеет правильную форму. Видеть: XML-атрибут[^].

Я сделал именно то, что здесь описано: c# - как десериализовать XML-документ - переполнение стека[^] и классы, порожденные xsd.exe инструмент совершенно другой, чем ваш. Выполните следующие действия и создайте соответствующие классы, чтобы иметь возможность использовать xml-сериализацию/десериализацию.