如何将xml schema的数据内容读到DataSet或DataTable???

youngahu 2006-02-11 05:39:10
请教大家一个问题:如何将xml schema的数据内容读到DataSet或DataTable里?
如下的xml字符串
<xml xmlns:s="uuid:BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882" xmlns:dt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882" xmlns:rs="urn:schemas-microsoft-com:rowset" xmlns:z="#RowsetSchema">
<s:Schema id="RowsetSchema">
<s:ElementType name="row" content="eltOnly" rs:updatable="true">
<s:AttributeType name="Mandt" rs:number="1" rs:write="true">
<s:datatype dt:type="string" rs:dbtype="str" dt:maxLength="255" rs:precision="0" rs:maybenull="false"/>
</s:AttributeType>
<s:AttributeType name="entity" rs:number="2" rs:write="true">
<s:datatype dt:type="string" rs:dbtype="str" dt:maxLength="255" rs:precision="0" rs:maybenull="false"/>
</s:AttributeType>
<s:AttributeType name="part" rs:number="3" rs:write="true">
<s:datatype dt:type="string" rs:dbtype="str" dt:maxLength="255" rs:precision="0" rs:maybenull="false"/>
</s:AttributeType>
<s:AttributeType name="site" rs:number="4" rs:write="true">
<s:datatype dt:type="string" rs:dbtype="str" dt:maxLength="255" rs:precision="0" rs:maybenull="false"/>
</s:AttributeType>
<s:AttributeType name="qty_req" rs:number="5" rs:write="true">
<s:datatype dt:type="number" rs:dbtype="currency" dt:maxLength="8" rs:precision="0" rs:fixedlength="true" rs:maybenull="false"/>
</s:AttributeType>
<s:AttributeType name="date" rs:number="6" rs:write="true">
<s:datatype dt:type="string" rs:dbtype="str" dt:maxLength="255" rs:precision="0" rs:maybenull="false"/>
</s:AttributeType>
<s:AttributeType name="flag" rs:number="7" rs:write="true">
<s:datatype dt:type="string" rs:dbtype="str" dt:maxLength="255" rs:precision="0" rs:maybenull="false"/>
</s:AttributeType>
<s:AttributeType name="type" rs:number="8" rs:write="true">
<s:datatype dt:type="string" rs:dbtype="str" dt:maxLength="255" rs:precision="0" rs:maybenull="false"/>
</s:AttributeType>
<s:AttributeType name="qty_atb" rs:number="9" rs:write="true">
<s:datatype dt:type="number" rs:dbtype="currency" dt:maxLength="8" rs:precision="0" rs:fixedlength="true" rs:maybenull="false"/>
</s:AttributeType>
<s:AttributeType name="qty_atp" rs:number="10" rs:write="true">
<s:datatype dt:type="number" rs:dbtype="currency" dt:maxLength="8" rs:precision="0" rs:fixedlength="true" rs:maybenull="false"/>
</s:AttributeType>
<s:AttributeType name="Qty_Lack" rs:number="11" rs:write="true">
<s:datatype dt:type="number" rs:dbtype="currency" dt:maxLength="8" rs:precision="0" rs:fixedlength="true" rs:maybenull="false"/>
</s:AttributeType>
<s:AttributeType name="Qty_Fulfill" rs:number="12" rs:write="true">
<s:datatype dt:type="number" rs:dbtype="currency" dt:maxLength="8" rs:precision="0" rs:fixedlength="true" rs:maybenull="false"/>
</s:AttributeType>
<s:AttributeType name="flag_scm" rs:number="13" rs:write="true">
<s:datatype dt:type="int" dt:maxLength="4" rs:precision="0" rs:fixedlength="true" rs:maybenull="false"/>
</s:AttributeType>
<s:AttributeType name="due_date" rs:number="14" rs:write="true">
<s:datatype dt:type="dateTime" rs:dbtype="variantdate" dt:maxLength="16" rs:precision="0" rs:fixedlength="true" rs:maybenull="false"/>
</s:AttributeType>
<s:AttributeType name="due_date_scm" rs:number="15" rs:write="true">
<s:datatype dt:type="dateTime" rs:dbtype="variantdate" dt:maxLength="16" rs:precision="0" rs:fixedlength="true" rs:maybenull="false"/>
</s:AttributeType>
<s:AttributeType name="atp_date_scm" rs:number="16" rs:write="true">
<s:datatype dt:type="dateTime" rs:dbtype="variantdate" dt:maxLength="16" rs:precision="0" rs:fixedlength="true" rs:maybenull="false"/>
</s:AttributeType>
<s:extends type="rs:rowbase"/>
</s:ElementType>
</s:Schema>
<rs:data>
<rs:insert>
<z:row Mandt="" entity="EU10" part="ADAM-4520-D2" site="EUH1" qty_req="1255" date="2006-02-13" flag="" type="SUPPLY_LT" qty_atb="1255" qty_atp="1255" Qty_Lack="0" Qty_Fulfill="97161" flag_scm="0" due_date="1999-12-31T12:00:00" due_date_scm="1999-12-31T12:00:00" atp_date_scm="1999-12-31T12:00:00"/>
<z:row Mandt="" entity="EU10" part="ADAM-4520-D2" site="EUH1" qty_req="783" date="2006-02-27" flag="" type="SUPPLY_LT" qty_atb="783" qty_atp="2038" Qty_Lack="0" Qty_Fulfill="97161" flag_scm="0" due_date="1999-12-31T12:00:00" due_date_scm="1999-12-31T12:00:00" atp_date_scm="1999-12-31T12:00:00"/>
<z:row Mandt="" entity="EU10" part="ADAM-4520-D2" site="EUH1" qty_req="800" date="2006-03-20" flag="" type="SUPPLY_LT" qty_atb="800" qty_atp="2838" Qty_Lack="0" Qty_Fulfill="97161" flag_scm="0" due_date="1999-12-31T12:00:00" due_date_scm="1999-12-31T12:00:00" atp_date_scm="1999-12-31T12:00:00"/>
<z:row Mandt="" entity="EU10" part="ADAM-4520-D2" site="EUH1" qty_req="97161" date="2006-03-21" flag="" type="SUPPLY_LT" qty_atb="97161" qty_atp="99999" Qty_Lack="0" Qty_Fulfill="97161" flag_scm="0" due_date="1999-12-31T12:00:00" due_date_scm="1999-12-31T12:00:00" atp_date_scm="1999-12-31T12:00:00"/>
</rs:insert>
</rs:data>
</xml>

大家可以尝试把上面的内容读到一个dataset然后在datagrid里显示吗?先谢谢大家了^_^
...全文
207 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
jiajia7131老凯 2006-03-16
  • 打赏
  • 举报
回复
sssss
cansum396 2006-03-16
  • 打赏
  • 举报
回复
make
youngahu 2006-02-11
  • 打赏
  • 举报
回复
谢谢net_lover(孟子E章)的指教,

但我用了你上述方法,还是不行,或者你也可以实际操作一下。

我在ASP中用DOM可以把XML string load进来,然后用一个RecordSet打开,但迁移到asp.net就遇到问题了。

请大家不吝赐教^_^
孟子E章 2006-02-11
  • 打赏
  • 举报
回复
试试

DataSet.ReadXml 方法 (String, XmlReadMode)
使用指定的文件和 XmlReadMode 将 XML 架构和数据读入 DataSet。
XmlReadMode 枚举:

Auto 默认值。
执行下列操作中的最合适的操作:

如果数据是 DiffGram,则将 XmlReadMode 设置为 DiffGram。

- 或 -

如果数据集已经有架构,或者文档包含内联架构,则将 XmlReadMode 设置为 ReadSchema。

- 或 -

如果数据集还没有架构且文档也不包含内联架构,则将 XmlReadMode 设置为 InferSchema。

DiffGram 读取 DiffGram,将 DiffGram 中的更改应用到 DataSet。语义与 Merge 操作的语义相同。与 Merge 操作一样,保留 RowState 值。向 ReadXml 的 DiffGram 输入只能使用 WriteXml 中的 DiffGram 输出来获得。
目标 DataSet 必须与在它上面作为 DiffGram 调用 WriteXml 的 DataSet 有相同的架构。否则,DiffGram 合并操作就会失败,并引发异常。

Fragment 针对 SQL Server 的实例读取 XML 片段(例如,通过执行 FOR XML 查询生成的 XML 片段)。当 XmlReadMode 设置为 Fragment 时,默认命名空间作为内联架构来读取。
IgnoreSchema 忽略任何内联架构并将数据读入现有的 DataSet 架构。如果任何数据与现有的架构不匹配,就会将这些数据丢弃(包括为 DataSet 定义的不同命名空间中的数据)。如果数据是 DiffGram,IgnoreSchema 与 DiffGram 具有相同的功能。
InferSchema 忽略任何内联架构,从数据推断出架构并加载数据。如果 DataSet 已经包含架构,就通过添加新表或者向现有的表添加列,来扩展当前架构。如果推断的表已经存在但是具有不同的命名空间,或者如果推断的列中有一些与现有的列冲突,则会引发异常。
InferTypedSchema 忽略任何内联架构,从数据推断出强类型架构并加载数据。如果无法从数据推断出类型,则会将其解释为字符串数据。如果 DataSet 已经包含架构,就通过添加新表或者通过向现有的表中添加列来扩展当前架构。如果推断的表已经存在但是具有不同的命名空间,或者如果推断的列中有一些与现有的列冲突,则会引发异常。
ReadSchema 读取任何内联架构并加载数据。如果 DataSet 已经包含架构,则可以将新表添加到架构中,但是如果内联架构中的任何表在 DataSet 中已经存在,则会引发异常

8,906

社区成员

发帖
与我相关
我的任务
社区描述
XML/XSL相关问题讨论专区
社区管理员
  • XML/XSL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧