【发布时间】:2019-11-22 05:43:35
【问题描述】:
我得到了一个 XML 文件和一个适当的 XSD 文件。我使用 xsd.exe 程序生成基于 XSD 文件 (xsd /dataset TestV7.xsd) 的数据集类,我将其导入到我的 VS2019(社区版)C# 项目中。当我尝试使用 NewDataSet testset = new NewDataSet; 实例化对象时,出现错误
System.ArgumentException
HResult=0x80070057
Message=Cannot set Column 'IDCode_text' property MaxLength. The Column is SimpleContent.
Source=<Cannot evaluate the exception source>
StackTrace:
<Cannot evaluate the exception stack trace>
谁能帮我解决这个错误?在 XML 处理方面我还很陌生,但我通常可以解决问题。这是 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="HOST">
<xs:complexType>
<xs:sequence>
<xs:element name="Header" type="Header" minOccurs="0"/>
<xs:element name="Departments" minOccurs="0">
<xs:complexType>
<xs:sequence>
<xs:element name="Department" type="Department" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="Type">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:length value="1"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:complexType>
</xs:element>
<xs:simpleType name="IDType">
<xs:restriction base="xs:string">
<xs:minLength value="5"/>
<xs:maxLength value="8"/>
<xs:pattern value="\d{5}"/>
<xs:pattern value="\d{8}"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="HostAction">
<xs:restriction base="xs:string">
<xs:length value="1"/>
<xs:enumeration value="D"/>
<xs:enumeration value="I"/>
<xs:enumeration value="U"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="BusinessPillar">
<xs:restriction base="xs:string">
<xs:length value="3"/>
<xs:enumeration value="ALM"/>
<xs:enumeration value="CCC"/>
<xs:enumeration value="CSD"/>
<xs:enumeration value="CWD"/>
<xs:enumeration value="IGA"/>
<xs:enumeration value="TAS"/>
</xs:restriction>
</xs:simpleType>
<xs:complexType name="Header">
<xs:sequence>
<xs:element name="IDCode">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="IDType">
<xs:attribute name="Type" use="required">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:length value="1"/>
<xs:enumeration value="C"/>
<xs:enumeration value="I"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name="CreationDate" type="xs:dateTime"/>
<xs:element name="Version">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:length value="5"/>
<xs:pattern value="\d\.\d\.\d"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="PricingZone" minOccurs="0">
<xs:simpleType>
<xs:restriction base="xs:integer">
<xs:totalDigits value="2"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="Business" type="BusinessPillar" minOccurs="0"/>
<xs:element name="State">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:minLength value="2"/>
<xs:maxLength value="3"/>
<xs:enumeration value="ACT"/>
<xs:enumeration value="NSW"/>
<xs:enumeration value="NT"/>
<xs:enumeration value="NZ"/>
<xs:enumeration value="QLD"/>
<xs:enumeration value="SA"/>
<xs:enumeration value="TAS"/>
<xs:enumeration value="VIC"/>
<xs:enumeration value="WA"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
</xs:sequence>
</xs:complexType>
<xs:complexType name="Department">
<xs:sequence>
<xs:element name="Description" minOccurs="0">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:minLength value="1"/>
<xs:maxLength value="40"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
</xs:sequence>
<xs:attribute name="DepartmentNumber" use="required">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:length value="2"/>
<xs:pattern value="\d{2}"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name="Action" type="HostAction" use="required"/>
</xs:complexType>
</xs:schema>
我一直在网上研究不同的东西,XSD 文件看起来是有效的,并且 xsd.exe 在构建 c# 文件时没有给出任何错误。我不知道是不是 XSD 文件的问题,但是在 VS 中生成错误的代码非常基本。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Xml;
namespace ImportV7Host
{
class Program
{
static void Main(string[] args)
{
// create a new dataset for the imported data
NewDataSet testset = new NewDataSet();
testset.Dispose();
}
}
}
【问题讨论】:
-
是什么让您认为可以使用 DataSet ReadXml() 方法读取 xml 文件?这是行不通的。当下降数很大(超过4级)时读取xml方法会将数据分成无法重组的表。数据集的创建如下:1)根标签数据集名称2)子标签是表名3)Grand Children标签是列名4)Great Grandchildren作为行数据。获得4级标签后,Net库会将数据分成附加表,无法重新组合。
-
在我尝试读取 XML 之前就发生了错误。只是数据集的声明会导致错误。
-
您使用的哪个库有 NewDataSet?它不是网络的一部分。你从哪里复制代码?
-
NewDataSet 是 XSD.exe 程序在针对提供的 xsd 文件运行时生成的数据集
-
它不使用命令:xsd.exe -c -l:cs 它生成要与 c# xml 序列化程序一起使用的类。您一定使用了错误的选项。
标签: c# xml xsd visual-studio-2019