将XSD序列的多行加载到DataSet中

时间:2019-10-24 15:25:53

标签: c# .net xml xsd dataset

我必须扩展现有应用程序以支持导入元素列表,而不是今天的单个元素。

测试应用程序加载XSD并使用读取XML

class Program
{
    private static string xmlFilePath = @"C:\tmp\index\data-minimal.xml";
    private static string xsdFilePath = @"C:\tmp\index\schema-minimal.xsd";

    static void Main(string[] args)
    {
        //define dataSet
        var ds = new DataSet();

        // Read XSD
        ds.ReadXmlSchema(xsdFilePath);

        //load xmlFile into dataSet
        ds.ReadXml(xmlFilePath);
    }
}

}

这是示例导入xml减少到最小:

<?xml version="1.0" encoding="utf-8"?>
<PRODUCTS xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <PRD>
        <PRDNO>30</PRDNO>
        <TRE>
            <TRCD>1395</TRCD>
            <TRCD>199</TRCD>
            <TRCD>433</TRCD>
        </TRE>
    </PRD>
</PRODUCTS>

我的目标是在TRE表中获得以下结构和内容:

PRDNO | TRCD
30 | 199
30 | 1390
30 | 433

我尝试使用以下xsd:

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
    <xs:element name="PRODUCTS">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="PRD" nillable="false" minOccurs="0" maxOccurs="unbounded">
                    <xs:complexType>
                        <xs:sequence>
                            <xs:element name="PRDNO" type="xs:int" nillable="false">
                            </xs:element>
                            <xs:element name="TRE" nillable="false" minOccurs="0" maxOccurs="1">
                                <xs:complexType>
                                    <xs:sequence>
                                        <xs:element name="TRCD" minOccurs="0" maxOccurs="unbounded">
                                            <xs:simpleType>
                                                <xs:restriction base="xs:string">
                                                    <xs:maxLength value="75"/>
                                                </xs:restriction>
                                            </xs:simpleType>
                                        </xs:element>
                                    </xs:sequence>
                                </xs:complexType>
                            </xs:element>
                        </xs:sequence>
                    </xs:complexType>
                </xs:element>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
</xs:schema>

但是有两个问题:

PRD_Id | TRCD
0 | 1395

  • 仅包含第一个TRCD
  • TRE表具有PRD_Id列,而不是PRDNO

任何提示/帮助将不胜枚举。

0 个答案:

没有答案