如何通过Powershell将XML数据读取到dataTable中,并通过给定的XmlSchema强制使用相应的类型



我目前正在努力通过强制执行给定的XmlSchema将XML数据读取到dataTable中。无论我做什么,在数据导入之后,所有类型都被设置回"0";字符串";。我需要强制下面的ID列为类型";int";(不是"字符串"或"字节"(:

$schema = '
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:group name="r">
<xs:sequence>
<xs:element name="id" type="xs:int" />
<xs:element name="name" type="xs:string" />
</xs:sequence>
</xs:group>
<xs:complexType name="body">
<xs:group ref="r" />
</xs:complexType>
</xs:schema>'
$data = '
<body>
<r>
<id>9</id>
<name>AAA</name>
</r>
<r>
<id>10</id>
<name>BBB</name>
</r>
</body>'
# read the schema:
$set = [System.Data.Dataset]::new()
$sr =[System.IO.StringReader]::new($schema)
$set.ReadXmlSchema($sr)
# read the data:
$sr =[System.IO.StringReader]::new($data)
$set.ReadXml($sr)
cls
$set.Tables | ft -AutoSize
write-host "type of column 'id' in table : " $set.Tables[0].Columns[0].DataType
$list = [System.Collections.ArrayList]::new($set.Tables[0].GetList())
write-host "type of column 'id' in list  : " $list[0].id.GetType()

我也用XMLReadMode做了一些测试,但唯一的变化出现在我使用[System.Data.XMLReadMode]::InferTypedSchema时,但这将类型更改为";字节";或其他取决于该列的数据的内容。

这里非常欢迎任何帮助!提前谢谢你。

多亏了提示,我终于解决了这个问题。首先我发现,在数据导入之前,我不需要创建一个专用的XMLSchema——只需创建适当的表结构就可以用更少的代码完成同样的事情。

这里是最后的代码示例:

cls
$set =[System.Data.DataSet]::new()
$set.tables.Add('r')
$table = $set.Tables[0]
[void]$table.Columns.Add('id', [int])
[void]$table.Columns.Add('name', [string])
$data = '
<body>
<r>
<id>9</id>
<name>AAA</name>
</r>
<r>
<id>10</id>
<name>BBB</name>
</r>
</body>'
# read the data:
$sr =[System.IO.StringReader]::new($data)
[void]$set.ReadXml($sr)
$set.Tables | ft -AutoSize
write-host "type of column 'id' in table : "   $table.Columns['id'].DataType
$list = [System.Collections.ArrayList]::new($table.GetList())
write-host "type of column 'id' in list  : " $list[0].id.GetType()

这里是上面脚本的输出:

id name
-- ----
9 AAA 
10 BBB 

type of column 'id' in table :  System.Int32
type of column 'id' in list  :  System.Int32

最新更新