.net - 通过使用 .NET 读取/写入 XML 进行数据处理

标签 .net c++ xml

我正在从事一个使用数学模型进行生理模拟的项目。我们目前使用 MML 中定义的模型,JSim的数学建模语言,自JSim以来被研究人员广泛使用。基本上,模型包含变量(带有公式、初始值和可选单位)和常量参数(带有值和可选单位)。变量和参数在内部由相同的数据类型表示,因为两者之间的唯一区别在于它是否具有公式。

我们还允许变量具有 MML 不支持的额外关联数据(解剖信息)。用户可以加载标准 MML 模型并根据需要进行编辑。保存这些编辑后,如果使用 MML 语法保存模型,则额外数据将丢失。

我目前的解决方案是将模型保存为 XML 而不是 MML 文本文件:

<model xmlns="http://tempuri.org/model_schema.xsd">
    <name>sample_model</name>
    <description>String</description>
    <variable type="realDomain" constant="false">
        <name>ID_1</name>
        <formula>G_p/VG</formula>
        <value>0.75</value>
        <units>s^-1</units>
        <description>String</description>
        <anatomical_structure FMAID="62970">
            <name>Kidney</name>
        </anatomical_structure>
    </variable>
    <variable type="real" constant="true">
        <name>ID_2</name>
        <formula />
        <value>1000</value>
        <units>mg</units>
    </variable>
</model>

这是我正在使用的模式:

<xs:schema id="model_schema" targetNamespace="http://tempuri.org/model_schema.xsd" elementFormDefault="qualified" xmlns="http://tempuri.org/model_schema.xsd" xmlns:mstns="http://tempuri.org/model_schema.xsd" xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:element name="model">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="name" type="xs:string" />
                <xs:element name="description" type="xs:string" minOccurs="0" />
                <xs:element name="variable" maxOccurs="unbounded">
                    <xs:complexType>
                        <xs:sequence>
                            <xs:element name="name" type="xs:ID" />
                            <xs:element name="formula" type="xs:string" />
                            <xs:element name="value" type="xs:float" />
                            <xs:element name="units" type="xs:string" minOccurs="0" />
                            <xs:element name="description" type="xs:string" minOccurs="0" />
                            <xs:element name="anatomical_structure" minOccurs="0">
                                <xs:complexType>
                                    <xs:sequence>
                                        <xs:element name="name" type="xs:string" />
                                    </xs:sequence>
                                    <xs:attribute name="FMAID" type="xs:int" use="required" />
                                </xs:complexType>
                            </xs:element>
                        </xs:sequence>
                        <xs:attribute name="constant" type="xs:boolean" use="required" />
                        <xs:attribute name="type" type="var_type" />
                    </xs:complexType>
                </xs:element>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
    <xs:simpleType name="var_type">
        <xs:restriction base="xs:string">
            <xs:enumeration value="realDomain" />
            <xs:enumeration value="real" />
            <xs:enumeration value="int" />
        </xs:restriction>
    </xs:simpleType>
</xs:schema>

有更好的方法吗?我没有太多生成 XML 的经验,也从未编写过架构,所以我不知道是否存在任何严重问题。

以编程方式生成 XML 的最佳方法是什么?现在我正在使用 XmlDocument。如何在文档中设置架构位置? XSD 文件将与应用程序捆绑在一起,而不是托管在服务器上。

生成 XML 后,如何读取/加载它?我看到的大部分信息都建议使用 LINQ,但项目使用 .NET 2.0 和 C++。 XmlReader 是最佳选择吗?或者我应该使用 System.Xml.Serialization 进行阅读和写作吗?我错过了什么重要的事情吗?

最佳答案

一种简单的方法是针对架构运行 XSD.EXE 程序。这将产生一组类。 XML Serializer 可用于将数据从 XML 文件加载到类实例中,并在更改后将它们序列化回 XML。


看起来它声称可以生成 C++ 代码。

/language:
    The language to use for the generated code. Choose from 'CS', 'VB', 'JS',
    'VJS', 'CPP' or provide a fully-qualified name for a class implementing
    System.CodeDom.Compiler.CodeDomProvider. The default language
    is 'CS' (CSharp). Short form is '/l:'.

关于.net - 通过使用 .NET 读取/写入 XML 进行数据处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1139449/

相关文章:

.net - 自动映射器 : mapping issue with inheritance and abstract base class on collections with Entity Framework 4 Proxy Pocos

android - 如何将qt资源添加到android APK文件中?

c++ - 有限自动机转换的空间和时间有效编码

xml - 从 XmlNode 创建 Xdocument 对象

java - JAX-WS - 如何创建类型为 xs :any from server side code? 的元素

java - Java 中的 XML 转换具有最佳性能

.net - 如何强制 VS 包含 GAC 中使用的程序集并将其复制到输出文件夹?

c# - Dapper 可以批处理一组存储过程调用吗?

c# - 如何使用只读属性通知 UI 更改?

c++ - 重载下标运算符并使用双指针?