Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将xml数据转换为数据集_C#_Xml_Dataset - Fatal编程技术网

C# 将xml数据转换为数据集

C# 将xml数据转换为数据集,c#,xml,dataset,C#,Xml,Dataset,我正在尝试将此xml信息放入表中。 我尝试将xml读入数据集中 string myXMLfile = @"..\..\..\BR7.xml"; //http://tatts.com/pagedata/racing/2011/10/5/BR7.xml //http://tatts.com/racing/2011/10/5/BR/7 DataSet ds = new DataSet(); try {

我正在尝试将此xml信息放入表中。 我尝试将xml读入数据集中

         string myXMLfile = @"..\..\..\BR7.xml";

        //http://tatts.com/pagedata/racing/2011/10/5/BR7.xml
        //http://tatts.com/racing/2011/10/5/BR/7

        DataSet ds = new DataSet();
        try
        {
            ds.ReadXml(myXMLfile);


            for (int i = 0; i < ds.Tables.Count; i++)
            {
                listBox1.Items.Add(ds.Tables[i].TableName);
            }

            dgvRunner.DataSource = ds;
            dgvRunner.DataMember = "Runner";

            dgvWinOdds.DataSource = ds;
            dgvWinOdds.DataMember = "WinOdds";

            dgvPlaceOdds.DataSource = ds;
            dgvPlaceOdds.DataMember = "PlaceOdds";

            dgvFixedOdds.DataSource = ds;
            dgvFixedOdds.DataMember = "FixedOdds";
string myXMLfile=@.\..\BR7.xml”;
//http://tatts.com/pagedata/racing/2011/10/5/BR7.xml
//http://tatts.com/racing/2011/10/5/BR/7
数据集ds=新数据集();
尝试
{
ReadXml(myXMLfile);
对于(int i=0;i
但我有四张不同的桌子:Runner、WinLobbs、PlaceLobbs和Fixedds 如何将跑步者的所有信息放在一张表中

下面是一些xml

-<Runner RunnerNo="1" Rtng="93" LastResult="0X1" Form="W" Weight="57.0" Handicap="0" Barrier="10" RiderChanged="N" Rider="P SCHMIDT(A)" Scratched="N" RunnerName="PREACHER BOY">
<WinOdds CalcTime="2011-10-05T16:51:07" LastCalcTime="2011-10-05T16:46:32" Short="N" Lastodds="11.50" Odds="10.70"/>
<PlaceOdds Short="N" Lastodds="3.50" Odds="3.30"/>
-<FixedOdds RaceDayDate="2011-10-05T00:00:00" MeetingCode="BR" RaceNo="07" RunnerNo="01" LateScratching="0" Status="w" OfferName="PREACHER BOY" RetailPlaceOdds="3.3500" RetailWinOdds="12.0000" PlaceOdds="3.3500" WinOdds="12.0000" OfferId="981020"><Book SubEventId="863449" BookStatus="F"/> 
</FixedOdds>
</Runner>
-
- 

您应该在每个表中都有关于RunnerNo的信息(WinOdd和PlaceLobbits中缺少该信息),这样您就可以关联四个数据表。您可以将RunnerNo定义为唯一的

在这之后,您可以只使用一个gridview,并将四个datatables之间的关系分配为gridview的DataMember


下面是一个关系的外观示例

我将提出一种方法,将
Runner
子属性的所有属性移动到
Runner
节点属性集合中。这需要以下假设:

  • Runner
    节点中的每个嵌套元素最多有一个嵌套元素(即
    fixedds
    元素中只有一个
    Book
    元素)
  • 通过在属性前面加上其原始节点的名称来重命名属性(
    windoffics
    元素中的
    CalcTime
    属性将以
    WinOddsCalcTime
    名称复制到
    Runner
    属性的集合中)
  • 您可以保留或删除子节点(我在代码示例中选择删除它们)
  • 代码如下:

        string myXMLfile = @"xml.xml";
    
        DataSet ds = new DataSet();
    
        try
        {
    
            XmlDocument doc = new XmlDocument();
            doc.Load(myXMLfile);
    
            var runners = doc.SelectNodes("/Runner");
    
            foreach (XmlNode runner in runners)
            {
                foreach (XmlNode child in runner.ChildNodes)
                {
                    for (int i = 0; i < child.Attributes.Count; i++)
                    {
                        var at =doc.CreateAttribute(child.Name + child.Attributes[i].Name);
                        at.Value=child.Attributes[i].Value;
                        runner.Attributes.Append(at);
                    }
                    if (child.Name == "FixedOdds")
                    {
                        foreach (XmlNode book in child.ChildNodes)
                        {
                            for (int i = 0; i < book.Attributes.Count; i++)
                            {
                                var at = doc.CreateAttribute(book.Name + book.Attributes[i].Name);
                                at.Value = book.Attributes[i].Value;
                                runner.Attributes.Append(at);
                            }
                        }
                    }
    
                    // delete the attributes and the children nodes
                    child.RemoveAll();
                }
    
                // delete the child noeds
                while (runner.ChildNodes.Count > 0)
                {
                    runner.RemoveChild(runner.ChildNodes[0]);
                }
            }
    
    
            doc.Save("xml1.xml");
    
            ds.ReadXml("xml1.xml");
    
            for (int i = 0; i < ds.Tables.Count; i++)
            {
                listBox1.Items.Add(ds.Tables[i].TableName);
            }
    
            dgvRunner.DataSource = ds;
            dgvRunner.DataMember = "Runner";
    
            //dgvWinOdds.DataSource = ds;
            //dgvWinOdds.DataMember = "WinOdds";
    
            //dgvPlaceOdds.DataSource = ds;
            //dgvPlaceOdds.DataMember = "PlaceOdds";
    
            //dgvFixedOdds.DataSource = ds;
            //dgvFixedOdds.DataMember = "FixedOdds";
        }
        catch (Exception)
        { }
            }
        }
    
    string myXMLfile=@“xml.xml”;
    数据集ds=新数据集();
    尝试
    {
    XmlDocument doc=新的XmlDocument();
    doc.Load(myXMLfile);
    var Runner=doc.SelectNodes(“/Runner”);
    foreach(运行程序中的XmlNode运行程序)
    {
    foreach(runner.ChildNodes中的XmlNode子节点)
    {
    对于(int i=0;i0)
    {
    runner.RemoveChild(runner.ChildNodes[0]);
    }
    }
    doc.Save(“xml1.xml”);
    ReadXml(“xml1.xml”);
    对于(int i=0;i