Как разобрать сгенерированный 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[^]