首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用XSD文件在C#中生成XML文件

使用XSD文件在C#中生成XML文件
EN

Stack Overflow用户
提问于 2020-10-14 12:18:31
回答 1查看 55关注 0票数 1

为了运行通过C#代码以xml格式导出数据,我使用了以下建议。但是我的xml格式和xsd是不同的,我在生成它时遇到了麻烦。

Related solution

我的xsd文件如下:

代码语言:javascript
运行
复制
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:element name="list">
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="Sam" maxOccurs="unbounded" minOccurs="0"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
    <xs:element name="Sam">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="UploadCode" type="xs:string" minOccurs="0"/>
                <xs:element name="UploadId" type="xs:string" minOccurs="0"/>
                <xs:element name="Lab" type="xs:string"/>
                <xs:element name="Job" type="xs:string"/>
                <xs:element name="Scheme" type="xs:string"/>
                <xs:element name="SampleType" type="xs:string"/>
                <xs:element name="SampleId" type="xs:string"/>
                <xs:element name="Id" type="xs:string"/>
                <xs:element name="qcOccur" type="xs:byte" minOccurs="0"/>
                <xs:element name="InstrumentName" type="xs:string"/>
                <xs:element name="InstrumentRunWith" type="xs:string"/>
                <xs:element name="AnalDate" type="xs:string" minOccurs="0"/>
                <xs:element name="AnalTime" type="xs:string" minOccurs="0"/>
                <xs:element name="Analyst" type="xs:string" minOccurs="0"/>
                <xs:element name="ResultMode" type="xs:string"/>
                <xs:element name="Dilution" type="xs:string" minOccurs="0"/>            
                <xs:element ref="Analyses"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
    <xs:element name="Analyses">
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="Ana" maxOccurs="unbounded" minOccurs="0"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
    <xs:element name="Ana">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="Analysis" type="xs:string"/>
                <xs:element name="Parameter" type="xs:string" minOccurs="0"/>
                <xs:element name="Result" type="xs:string"/>
                <xs:element name="AnalDate" type="xs:string"/>
                <xs:element name="AnalTime" type="xs:string"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
</xs:schema>

我的xml输出文件应该如下所示:

代码语言:javascript
运行
复制
<list>
  <Sam>
    <Lab>ZAORK_M</Lab>
    <Job>ORK20-01536</Job>
    <Scheme>GO_FAG50V</Scheme>
    <SampleType>Unknown</SampleType>
    <SampleId>ORK20-01536.001</SampleId>
    <Id>ORK_S0003725727</Id>
    <InstrumentName>B0001_OFFLINE_WEIGHT</InstrumentName>
    <InstrumentRunWith>MKY386</InstrumentRunWith>
    <AnalDate>3/10/2019|dd/MM/yyyy</AnalDate>
    <AnalTime>8:33:23 AM|hh:mm:ss a</AnalTime>
    <Analyst>PHILLIP_HARRIS</Analyst>
    <ResultMode>WEIGHT_VOLUME</ResultMode>
    <Analyses>
      <Ana>
        <Analysis>Weight</Analysis>
        <Result>0.1111</Result>
        <AnalDate>3/10/2019|dd/MM/yyyy</AnalDate>
        <AnalTime>8:33:23 AM|hh:mm:ss a</AnalTime>
      </Ana>
      <Ana>
        <Analysis>Volume</Analysis>
        <Result>0.1</Result>
        <AnalDate>3/10/2019|dd/MM/yyyy</AnalDate>
        <AnalTime>8:33:23 AM|hh:mm:ss a</AnalTime>
      </Ana>
    </Analyses>
  </Sam>
</list>

我的代码如下:

代码语言:javascript
运行
复制
var Sample = new Sam { UploadCode = "test1", UploadId = "test2" };
            var Analysis = new Ana { Analysis = "Test2", Result = "123" };

            var serializer1 = new XmlSerializer(typeof(Sam));
            using (var stream = new StreamWriter("C:\\test.xml"))
            {
                serializer1.Serialize(stream, Sample);
            }

我遇到的问题是我不能在sam之前创建list节点,也不能把Analysis放在sam和Ana下分析。

我不能理解如何修复我的代码,使它正确地知道哪个子节点是如何应用于正确的父节点的。如果有人知道如何解决这个问题,请提供帮助。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-10-14 13:40:19

您的代码中缺少一些实际生成消息的步骤。从xsd生成的cs文件有一个名为list()的类。这是您想要创建完整的xml结构时的起点。在list下面有一个名为Sam的重复组,xsd.exe将其转换为一个数组。Xsd.exe不知道列表。因此,您需要做的下一件事是定义Sam将出现在xml文件中的情况。对于eacht Sam,也需要定义一个名为Analysis的数组。如果这样做,然后将内容序列化为xml文件,您将获得所需的内容。但请记住,您需要填充类中的所有元素。如果不这样做,序列化程序将采用默认值,数值字段为0,字母数字字段为null。空值不会被序列化,因此该元素会被省略,从而使xml内容无效。

下面的示例可以工作,但缺少了很多元素

代码语言:javascript
运行
复制
var list = new list();
list.Sam = new Sam[1];
            
var sample = new Sam { UploadCode = "test1", UploadId = "test2", Analyses = new Ana[1]};
var analysis = new Ana { Analysis = "Test2", Result = "123" };

sample.Analyses[0] = analysis;
list.Sam[0] = sample;

var serializer1 = new XmlSerializer(typeof(list));
using (var stream = new StreamWriter("test.xml"))
{
   serializer1.Serialize(stream, list);
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64346521

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档