首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将XML读入DataTable。需要匹配架构

将XML读入DataTable。需要匹配架构
EN

Stack Overflow用户
提问于 2013-07-02 01:27:16
回答 2查看 426关注 0票数 0

我正在尝试将XML文件读取到DataTable中,但我很难匹配模式,并将其正确转换。这就是XML可能的样子...

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-8"?>
<School>
  <Teacher>
    <Name>Teacher1</Name>
    <Student>
      <Student-Name>Student1</Student-Name>
      <Gender>M</Gender>
      <Address>Address1</Address>
    </Student>
    <Student>
      <Student-Name>Student2</Student-Name>
      <Gender>F</Gender>
      <Address>Address2</Address>
    </Student>
  </Teacher>
  <Teacher>
    <Name>Teacher2</Name>
    <Student>
      <Student-Name>Student3</Student-Name>
      <Gender>F</Gender>
      <Address>Address3</Address>
    </Student>
  </Teacher>
</School>

我需要将它添加到一个DataTable中,这样它的表看起来就像这样

姓名、性别、姓名、姓名、地址

教师1,学生1,学生1,学生1,学生1,学生1,学生1,学生1,学生3,学生3,教师3,教师3,教师3,教师3,教师3,学生1,学生1,学生3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,

教师1:学生2:* Address2

教师2,学生3,学生,

DataTable.ReadXML() -->不允许我读入这个XML文件。该错误表明DataTable不支持架构推断

DataSet.ReadXML() -->不提取模式并将其分成两个表,第一个是教师表,第二个是学生表,即使它被设置为推断模式也是如此。

另一个问题是,我正在对几种类型的XML文件执行此操作。所有这些节点都有不同数量的节点嵌套在学生中,我需要将其泛化,以便它可以读取XML,而不管节点的数量有多少。

我想知道是否需要设置一个XmlReader来读入此内容,或者是否需要使用DataSet.ReadXML()/DataTable.ReadXML()上的任何设置。谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-07-02 01:31:05

如果您熟悉Xsd.exe ( visual studio中的一个工具),则可以从XML数据生成类,这将允许您将数据直接从XML批量加载到生成的类中。

票数 0
EN

Stack Overflow用户

发布于 2022-02-11 09:12:06

之所以会遇到这个问题,是因为您使用的是DataTable (而不是DataSet),而您的XML模式尚未定义。

以下是在DataTable中导出SQL数据的示例

代码语言:javascript
复制
Dim sTable As String = "payement"
Dim sFileName = "db.select." & sTable & ".xml"
Dim cmd = New NpgsqlCommand(sSQL, npgconx)
Dim rxSheet as IDataReader= cmd.ExecuteReader()

Dim dtSheet = New DataTable(sTable)
dtSheet.Load(rxSheet)
dtSheet.WriteXml(sFileName)
dtSheet.WriteXmlSchema(sFileName.Replace(".xml", ".Schema.xml"))

在此代码中,在将SQL数据导出到XML文件之后,使用WriteXmlSchema()函数导出XML模式。

现在,在DataTable中导入相同的数据

代码语言:javascript
复制
Dim sTable As String = "payement"
Dim sFileName = "db.select." & sTable & ".xml"
Dim dtSheet = New DataTable(sTable)
dtSheet.ReadXmlSchema(sFileName.Replace(".xml", ".Schema.xml"))
dtSheet.ReadXml(sFileName)

ReadXml()函数之前执行ReadXmlSchema()函数是很重要的。

WriteXml()函数中,传递表名也很重要。

当记录数量非常多时,我使用这段代码来序列化由我的PC上的SELECT SQL命令返回的元组,所以下次我想测试我的程序时,我不会用我的大提取来加载DataBase……有时候我不会等太多时间。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17410239

复制
相关文章

相似问题

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