当前位置:编程学习 > C#/ASP.NET >>

C#读取XML问题

       <PointRecord ID="00000057" TimeStamp="2010-07-05T09:39:59">
            <Name>Yzc</Name>
            <Code/>
            <Method>GpsRTKControlPoint</Method>
            <SurveyMethod>Fix</SurveyMethod>
            <Classification>Normal</Classification>
            <Deleted>false</Deleted>

            <ECEFDeltas>
                <DeltaX>1838.5519045149</DeltaX>
                <DeltaY>482.8904503677</DeltaY>
                <DeltaZ>-333.16447392013</DeltaZ>
            </ECEFDeltas>
            <ReferenceRecordID>0000004d</ReferenceRecordID>
            <RTK_Base>A1</RTK_Base>
            <AntennaID>00000056</AntennaID>

            <ComputedGrid>
                <North>33935.771457227</North>
                <East>74407.768982798</East>
                <Elevation>567.1</Elevation>
            </ComputedGrid>
            <Precision>
                <Horizontal>0.00616929062489</Horizontal>
                <Vertical>0.01237836094254</Vertical>
            </Precision>
            <QualityControl1>
                <NumberOfSatellites>12</NumberOfSatellites>
                <RelativeDOPs>true</RelativeDOPs>
                <PDOP>1.8156530857086</PDOP>
                <HDOP>0.8749361038208</HDOP>
                <VDOP>1.6248326301575</VDOP>
                <RMS>16.82648435235</RMS>
                <NumberOfPositionsUsed>32</NumberOfPositionsUsed>
                <HorizontalStandardDeviation/>
                <VerticalStandardDeviation/>
                <StartTime>
                    <GPSWeek>1591</GPSWeek>
                    <Seconds>92384.2</Seconds>
                </StartTime>
                <EndTime>
                    <GPSWeek>1591</GPSWeek>
                    <Seconds>92415.2</Seconds>
                </EndTime>
                <MonitorStatus>NotMonitored</MonitorStatus>
            </QualityControl1>
        </PointRecord>
请教如何提取PointRecord中的需要的字段在dataGridView表中显示,比如说我需要显示的是其中的Name+North+East+Elevation+……
简单的代码如下:
            DataSet myDataSet = new DataSet();
            myDataSet.ReadXml("20100705.xml");
            dataGridView1.DataSource = myDataSet.Tables["PointRecord"];
请高手帮忙,谢谢 --------------------编程问答-------------------- 那你只需要在gridview中设置要显示的列就可以了

        <Columns>
           <asp:BoundField DataField="Name" HeaderText="名称" />
//...
        </Columns> --------------------编程问答-------------------- 或者你直接将XML转换成DATASET --------------------编程问答-------------------- 参考 --------------------编程问答-------------------- 不好意思,可否详细点,我是个菜鸟,谢谢 --------------------编程问答-------------------- DataSet myDataSet = new DataSet();
            myDataSet.ReadXml("20100705.xml");
            //dataGridView1.DataSource = myDataSet.Tables["PointRecord"]; 注释该句

            //定义需要显示的列头数组
            string[] aryColums = new string[] { "Name", "North", "East", "Elevation" };
            //定义需要显示的行数据的数组
            string[] aryData = null;
            //用数组初始化列头
            for (int i = 0; i < aryColums.Length; i++)
            {
                dataGridView1.Columns.Add(aryColums[i], aryColums[i]);
            }

            //取PointRecord表数据(Name在该表中)
            DataTable t_PointRecord = myDataSet.Tables["PointRecord"];
            //取ComputedGrid表数据(Notrh,Ease,Elevation在该表中)
            DataTable t_ComputedGrid = myDataSet.Tables["ComputedGrid"];
            //定义关联ID(考虑xml中可能有多个PointRecord节点,id用于关联子节点下面的数据,即当前dataSet中表ComputedGrid的数据)
            string id = "";

            //清空dataGridView
            dataGridView1.Rows.Clear();

            //xml中有多少个PointRecord节点,PointRecord表中就有多少条数据,以PointRecord_Id标识唯一性
            for (int i = 0; i < t_PointRecord.Rows.Count; i++)
            {

                //创建行数据数组(上面只是定义,这里才new)
                aryData = new string[aryColums.Length];
                //获取到PointRecord_Id值,用于查询ComputedGrid表数据
                id = t_PointRecord.Rows[i]["PointRecord_Id"].ToString();
                //从PointRecord表中取Name
                //注意aryData数组中值的顺序,该顺序为显示顺序
                aryData[0] = t_PointRecord.Rows[i]["Name"].ToString();
                //从ComputedGrid表中取North
                //首先查询PointRecord_Id = id 的记录,Select方法返回的是行的数组,因为满足条件的行可能存在多行
                //但就我们的情况,PointRecord节点下面有且只有一个ComputedGrid节点,所以直接取数组最上面一维,即[0]
                //取到行对象后,再使用Row[列名]取值,再ToString后存放到aryData数组中
                aryData[1] = t_ComputedGrid.Select("PointRecord_Id = '" + id + "'")[0]["North"].ToString();
                //从ComputedGrid表中取East
                aryData[2] = t_ComputedGrid.Select("PointRecord_Id = '" + id + "'")[0]["East"].ToString();
                //从ComputedGrid表中取Elevation
                aryData[3] = t_ComputedGrid.Select("PointRecord_Id = '" + id + "'")[0]["Elevation"].ToString();
                //使用aryData构到Row对象并添加到dataGridView中
                dataGridView1.Rows.Add(aryData);
}

这里面只有一个PointRecord根节点时是没有问题的,但是有多个的时候就出错了
补充:.NET技术 ,  C#
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,