0

以下の XML 形式を読みたいのですが、すべてではなく一部の属性のみが必要です。例:

<Parts>
-   <Part>
        <Section>3003512</Section> 
        <Mark>RP-103</Mark> 
        <Length>4950</Length> 
        - <Components>
                <Section>3003512</Section> 
                <Mark>RP-103</Mark> 
                <Length>4950</Length>
                <Remark>System Generated </Remark>
              <Components />
            <Remark>No Comments </Remark>
        </Part>

-   <Part>
        <Section>3003512</Section> 
        <Mark>RP-103</Mark> 
        <Length>4950</Length> 
        <Components />
        <Remark>No Comments </Remark>
     </Part>
</Parts>

セクションのみを読み取り、表形式でマークしたい。これを読むために以下のコードを使用していますが、 Error Table Schema 'Component' Already Exists を与えています。

        DataTable dt = new DataTable();
        DataColumn dc = new DataColumn("Mark");
        DataColumn dc1 = new DataColumn("Sections ");
        dt.Columns.Add(dc); 
        dt.Columns.Add(dc1);
        DataSet dSet = new DataSet();


        if (File.Exists(xmlpath2))
        {

            XmlTextReader Reader1 = new XmlTextReader(xmlpath2);



            dSet.ReadXml(Reader1, XmlReadMode.Auto);


            for (int i = 0; i < dSet.Tables[0].Rows.Count; i++)
            {
                DataRow rows = dSet.Tables[0].Rows[i];
                DataRow myRow = dt.NewRow();
                myRow["Mark"] = rows["Mark"];
                myRow["Sections "] = rows["Sections "];

                dt.Rows.Add(myRow);
            }


            GridView1.DataSource = dt;
            GridView1.DataBind(); 

        }
4

2 に答える 2

0

LINQtoXMLを使用した例を次に示します。

var ele = XElement.Parse(xml); // change to XElement.Load if loading from file

var result = ele.Descendants("Section")
                .Zip(ele.Descendants("Mark"), 
                    (s,m) => new {Section = s.Value, Mark = m.Value});

今、あなたはあなたのを作成することができますDataTable

var table = new DataTable();
var marks = new DataColumn("Mark");
var sections = new DataColumn("Sections");

table.Columns.Add(marks);
table.Columns.Add(sections);

foreach (var item in result)
{
    var row = table.NewRow();
    row["Mark"] = item.Mark;
    row["Sections"] = item.Section;
    table.Rows.Add(row);
}

これにより、次のものが生成されます。

Mark     Sections 
RP-103   3003512 
RP-103   3003512 
RP-103   3003512 

Sectionそれぞれの後に単一の対応するが続くことを前提としていMarkます。また、とが必要System.Xml.LinqですSystem.Linq

于 2012-05-17T03:59:07.093 に答える
0

しばらく前に似たようなことをしていました: LINQ 複数の列

希望はあなたを正しい軌道に乗せるはずです

于 2012-05-17T03:53:26.023 に答える