C#,XML - 根据参数将单个XML文件加载到两个单独的数据集中

时间:2011-10-14 13:13:27

标签: c# .net xml dataset xmldocument

我需要根据XML中的给定参数将XML数据加载到两个单独的数据集中。数据通过SOAP调用反馈给我。

这是一个非常简化的XML示例:

<![CDATA[<?xml version="1.0" encoding="utf-16"?>

<ArrayOfUser xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

<User>
    <ID>111-111-111</ID
    <Name>John Smith</Name>
    <Active>0</Active>
</User>

<User>
    <ID>111-111-222</ID
    <Name>Bob Smith</Name>
    <Active>0</Active>
</User>

<User>
    <ID>111-111-333</ID
    <Name>Sally Smith</Name>
    <Active>1</Active>
</User>


</ArrayOfUser>]]>

现在,我将所有内容加载到单个数据集中:

XmlDocument UsersXmlDoc= new XmlDocument();
UsersXmlDoc.LoadXml(GetUsersResponse.Fetch_Result);
XmlReader UsersXmlReader= new XmlNodeReader(UsersXmlDoc);

DataSet ds = new DataSet();
ds.ReadXml(UsersXmlReader);

我希望根据每个用户的 Active 属性将该信息拆分为两个数据集,以便一个数据集包含活动用户,另一个数据集包含其他无效用户。

1 个答案:

答案 0 :(得分:1)

我举了一个例子,你可以做你想做的事。也许代码不是很好,但我认为它应该工作。主要思想是复制当前数据集并从第二个数据集中删除第一个和非活动记录中的活动记录。

DataSet dsActive = new DataSet();
dsActive.ReadXml(UsersXmlReader);

DataSet dsInactive = ds.Copy();//Copy to your another dataset
Remove(dsActive.Tables[0], "0");//Remove all inactive(where Active = 0) records from dsActive DataSet
Remove(dsInactive.Tables[0], "1");//Remove all active(where Active = 1) records from dsInactive DataSet

private void Remove(DataTable table, string active)
{
    for (int i = 0; i < table.Rows.Count; i++)
    {
        if (table.Rows[i]["Active"].Equals(active))
        {
            table.Rows[i].Delete();
            i = i - 1;//Removed record so we need to check same index
        }
    }
}