将XML读取到DataTable中.需要匹配架构

本文关键字:XML 读取 DataTable | 更新日期: 2023-09-27 18:20:31

我正试图将XML文件读取到DataTable中,但我很难匹配模式并正确转换它。这就是XML的样子。。。

<?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中,使其看起来像这个

名称 nbsp nbsp nbsp nbsp 学生姓名 nbsp;性别 nbsp;地址
----------------------------------------------------
教师1 nbsp;学生1 nbsp nbsp nbsp nbsp nbsp M nbsp;地址1
教师1 nbsp;学生2 nbsp nbsp nbsp nbsp nbsp F nbsp;地址2
教师2 nbsp;学生3 nbsp nbsp nbsp nbsp nbsp F nbsp;地址3

DataTable.ReadXML()-->不允许我读取此XML文件。错误表明DataTable不支持模式推断
DataSet.ReadXML()-->不会获取架构,并将其分为两个表,第一个是教师表,第二个是学生表,即使设置为推断架构也是如此。

另一个问题是,我使用了几种类型的XML文件。所有这些都在学生中嵌套了不同数量的节点,我需要使其通用,以便它可以读取XML,而不管节点数量如何。

我想知道我是否需要设置一个XmlReader来读取它,或者我是否需要使用DataSet.ReadXML()/DataTable.ReadXML()上的任何设置。非常感谢。

将XML读取到DataTable中.需要匹配架构

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

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

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

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"))

在这段代码中,在XML文件中导出SQL数据后,WriteXmlSchema()函数用于导出XML模式。

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

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命令返回的元组,所以下次我想测试我的程序时,我不会用我的大提取加载数据库。。。有时我不会等太久。