1

XML ファイルがあり、それを読み取って結果をデータテーブルに保存したいのですが、これが私の XML ファイルです。

<?xml version="1.0" standalone="yes"?>
<NewDataSet>
  <Table name="tblAdminUser">
<Column>
  <displayname>
    Created Date
  </displayname>
  <orignalvalue>
    Created_Date
  </orignalvalue>
</Column>
<Column>
  <displayname>
    First Name
  </displayname>
  <orignalvalue>
    F_Name
  </orignalvalue>
</Column>
  </Table>
<Table name="test1">
   <Column> 
     <displayname>
    Last Name
  </displayname>
  <orignalvalue>
    L_Name
  </orignalvalue>
</Column>
<Column>
  <displayname>
    Created By
  </displayname>
  <orignalvalue>
    Created_By
  </orignalvalue>
</Column>
  </Table>
</NewDataSet>

今、私がやりたいことは次のとおりです。

「テーブル」ノードの「名前」が「tblAdminuser」の場合、「表示列」ノードの内部値と対応する「元の値」を 2 つの列のデータテーブルで取得したいと考えています。

私が今までやったことは次のとおりです。

XmlDataDocument xmldoc = new XmlDataDocument();
    xmldoc.Load(Server.MapPath("~/XMLFile.xml"));
    XmlElement root = xmldoc.DocumentElement;
    XmlNodeList tablenodes = root.SelectNodes("Table");
    foreach (XmlNode nodes in tablenodes)
    {

        if (nodes.LocalName == "tblAdminUser")
        {
            XmlNodeList Columnnodes = root.SelectNodes("Column"); // You can also use XPath here
            XmlNodeList displayColumnnodes = root.SelectNodes("Column");
            foreach (XmlNode node in displayColumnnodes)
            {
                Response.Write(node.InnerText);
                // use node variable here for your beeds
            }
        }
    }

私を助けてください。

4

3 に答える 3

1

これが私の要件を完全に満たすための私のコードです:

using System;
using System.Xml;
using System.Web;
using System.Data;

public class ClsXML
{
public DataTable GetColumnsFromXML(String XMLPath, String TableName)
{
    DataTable dtForColumns = DatatableforColumns();
    XmlDataDocument xmldoc = new XmlDataDocument();
    xmldoc.Load(XMLPath);
    XmlElement root = xmldoc.DocumentElement;
    XmlNodeList tablenodes = root.SelectNodes("Table");

    if (tablenodes != null)

        foreach (XmlNode nodes in tablenodes)
        {
            if (!nodes.HasChildNodes) continue;
            if (nodes.Attributes == null) continue;
            //TableName = nodes.Attributes[0].Value;

            if (nodes.Attributes[0].Value == TableName)
            {
                String PrimaryKey = nodes.Attributes[1].Value;
                var nodesdisplayname = nodes.SelectNodes("Column/DisplayColumn");
                var nodesorignalvalue = nodes.SelectNodes("Column/OrignalColumn");

                if (nodesdisplayname != null && nodesorignalvalue != null)
                {
                    for (int i = 0; i <= nodesdisplayname.Count - 1; i++)
                    {
                        var xmlDisplayNode = nodesdisplayname.Item(i);
                        var xmlOrignalNode = nodesorignalvalue.Item(i);


                        if (xmlDisplayNode != null && xmlOrignalNode != null)
                        {

                            DataRow dr;
                            dr = dtForColumns.NewRow();
                            dr["DisplayColumn"] = xmlDisplayNode.InnerText;
                            dr["OrignalColumn"] = xmlOrignalNode.InnerText;
                            dr["PrimaryKey"] = PrimaryKey;
                            dtForColumns.Rows.Add(dr);
                        }
                    }
                }
            }
        }
    return dtForColumns;
}
private DataTable DatatableforColumns()
{
    DataTable dt = new DataTable();
    dt.Columns.Add("DisplayColumn", typeof(String));
    dt.Columns.Add("OrignalColumn", typeof(String));
    dt.Columns.Add("PrimaryKey", typeof(String));
    return dt;
}
}

すべての幸せなコードに感謝します...

于 2013-03-15T10:23:55.480 に答える