XSD到XML(手工):这是如何转换的?

时间:2017-02-28 00:20:21

标签: xml xsd

所以我正在编写一个解析XML文件的应用程序,该文件可能具有非常复杂的结构 - XSD很大(它是.trx测试结果文件的XSD),我正在尝试开发一套将处理文件可以拥有的每个可能节点集的类。

(顺便说一句,我知道我可以从Visual Studio附带的xsd.exe工具中生成它,但我发现代码难以阅读且难以维护。我想要更清洁和可维护的东西。)

我的问题是:这个XSD块究竟是如何转换为XML节点的?

XSD:

<xs:complexType name="TestSettingsType">
    <xs:all>
        <xs:element minOccurs="0" name="Description" />
        <xs:element minOccurs="0" name="Deployment">
            <xs:complexType>
                <xs:complexContent mixed="false">
                    <xs:extension base="DeploymentItemsType">
                        <xs:attribute default="false" name="deploySatelliteAssemblies" type="xs:boolean" use="optional" />
                    </xs:extension>
                </xs:complexContent>
            </xs:complexType>
        </xs:element>
    </xs:all>
</xs:complexType>

其中DeploymentItemsType的定义如下:

<xs:complexType name="DeploymentItemsType">
    <xs:sequence>
        <xs:element name="DeploymentItem" minOccurs="0" maxOccurs="unbounded">
            <xs:complexType>
                <xs:attribute name="filename" type="xs:string" use="required"/>
                <xs:attribute name="outputDirectory" type="xs:string" use="optional"/>
            </xs:complexType>
        </xs:element>
    </xs:sequence>
</xs:complexType>

(我试图通过删除一些属性来清理它,因为我不希望这对于帖子来说太大了。)

我想出了两个选择。这是第一个:

<TestSettings>
    <Description>Some description</Description>
    <Deployment>
        <DeploymentItems deploySatelliteAssemblies="false">
            <DeploymentItem filename="some_file.txt" outputDirectory="some_output.txt" />
            <DeploymentItem filename="some_file2.txt" outputDirectory="some_output2.txt" />
        </DeploymentItems>
    </Deployment>
</TestSettings>

这是第二个:

<TestSettings>
    <Description>Some description</Description>
    <Deployment deploySatelliteAssemblies="false">
        <DeploymentItem filename="some_file.txt" outputDirectory="some_output.txt" />
        <DeploymentItem filename="some_file2.txt" outputDirectory="some_output2.txt" />
    </Deployment>
</TestSettings>

这两个中的一个是正确的,还是都错了?

我强烈怀疑第一个解决方案是正确的,但我似乎无法自己生成.trx文件来验证它(我已经使用vstest.console.exe和.testsettings尝试了我所知道的一切文件,没有运气)。所以,我必须手工生成潜在的XML。不过,我对XSD并不熟悉。

我正在为此编写一个API,我想尽可能多地涵盖我的可能情况 - 也就是说,如果它可以在一个文件中,我会喜欢能够解析它。

0 个答案:

没有答案