C# Asp.net中继器中的XML分层数据绑定

C# Asp.net中继器中的XML分层数据绑定,c#,xml,asprepeater,C#,Xml,Asprepeater,大家好,我希望你们周末过得愉快 我有一个asp.net中继器,它从XML文件接收数据,此XML文件包含以下数据: <?xml version="1.0" encoding="utf-8" standalone="yes"?> <ListaDeRegimes> <Regime nome="RJR"> <nome>This is Regime Info</nome> <descricao>This is Regi

大家好,我希望你们周末过得愉快

我有一个asp.net中继器,它从XML文件接收数据,此XML文件包含以下数据:

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<ListaDeRegimes>
<Regime nome="RJR">
    <nome>This is Regime Info</nome>
    <descricao>This is Regime Description</descricao>
    <região nome="Mainland">
        <grupo nome="group1">
            <Serviços>
                <nome>Service1</nome>
                <link>#</link>
            </Serviços>
            <Serviços>
                <nome>Service2</nome>
                <link>#</link>              
            </Serviços>
            <Serviços>
                <nome>Service3</nome>
                <link>#</link>              
            </Serviços>
        </grupo>
        <grupo nome="group2">
            <Serviços>
                <nome>Service1</nome>
                <link>#</link>
            </Serviços>
            <Serviços>
                <nome>Service2</nome>
                <link>#</link>              
            </Serviços>
            <Serviços>
                <nome>Service3</nome>
                <link>#</link>              
            </Serviços> 
        </grupo>
    </região>
    <região nome="Islands">
        <grupo nome="group1">
            <Serviços>
                <nome>Service1</nome>
                <link>#</link>
            </Serviços>
            <Serviços>
                <nome>Service2</nome>
                <link>#</link>              
            </Serviços>
        </grupo>
        <grupo nome="group2">
            <Serviços>
                <nome>Service1</nome>
                <link>#</link>
            </Serviços>
            <Serviços>
                <nome>Service2</nome>
                <link>#</link>              
            </Serviços>
        </grupo>
    </região>   
</Regime>
<Regime nome="AL">
    <nome>This is Regime Name</nome>
    <descricao>This is Regime Description</descricao>
    <região nome="Mainland">
        <grupo>
            <Serviços>
                <nome>Service1</nome>
                <link>#</link>
            </Serviços>
            <Serviços>
                <nome>Service2</nome>
                <link>#</link>              
            </Serviços>
            <Serviços>
                <nome>Service3</nome>
                <link>#</link>              
            </Serviços>
        </grupo>
    </região>
</Regime>
这是创建datatable的代码

        public static DataTable DataTableAddRow(DataTable _oDataTable, string[] _valueList)
    {
        try
        {
            DataRow dtRow = null;
            dtRow = _oDataTable.NewRow();
            for (int ipos = 0; ipos < _valueList.Length; ipos++)
            {
                if (_valueList[ipos] != string.Empty)
                {
                    dtRow[ipos] = _valueList[ipos];
                }

            }
            _oDataTable.Rows.Add(dtRow);

            return _oDataTable;
        }
        catch
        {
            return null;
        }
    }

    public static DataTable BuildDataTable(string[] _columnNameList)
    {
        try
        {
            DataTable oTable = new DataTable();
            oTable.Locale = CultureInfo.InvariantCulture;
            DataColumn dtCol = new DataColumn();
            for (int ipos = 0; ipos < _columnNameList.Length; ipos++)
            {
                dtCol = new DataColumn();
                dtCol.ColumnName = _columnNameList[ipos].ToString();
                oTable.Columns.Add(dtCol);
            }
            return oTable;
        }
        catch
        {
            return null;
        }
    }
publicstaticdatatable DataTableAddRow(DataTable\u oDataTable,string[]\u valueList)
{
尝试
{
DataRow dtRow=null;
dtRow=_oDataTable.NewRow();
对于(int ipos=0;ipos<\u valueList.Length;ipos++)
{
if(_valueList[ipos]!=string.Empty)
{
dtRow[IPO]=_价值清单[IPO];
}
}
_oDataTable.Rows.Add(dtRow);
返回_oDataTable;
}
抓住
{
返回null;
}
}
公共静态数据表BuildDataTable(字符串[]\u columnNameList)
{
尝试
{
DataTable oTable=新DataTable();
oTable.Locale=CultureInfo.InvariantCulture;
DataColumn dtCol=新的DataColumn();
对于(int ipos=0;ipos<\u columnNameList.Length;ipos++)
{
dtCol=新数据列();
dtCol.ColumnName=\u columnNameList[ipos].ToString();
oTable.Columns.Add(dtCol);
}
返回可旋转;
}
抓住
{
返回null;
}
}
这是源端的中继器

<body>
<form id="form1" runat="server">
    <div>
        <asp:Repeater ID="Repeater1" runat="server" OnItemCommand="Repeater1_ItemCommand">
            <ItemTemplate>
                <div>
                    <span class="categoryLabel">
                        <span class="textLabel"><%# DataBinder.Eval(Container.DataItem, "NomeDeRegime") %></span>
                        <span class="iconLabel"><%# DataBinder.Eval(Container.DataItem, "NomeDeDescricao") %></span>
                    </span>
                </div>
                <ul>
                    <li>
                        <div class="searchResultsListItem">
                            <h3>
                                <a href="<%# DataBinder.Eval(Container.DataItem, "LinkDeServiços") %>" onclick="recordClickEvent(this,'10_1', null);"><%# DataBinder.Eval(Container.DataItem, "NomeDeServiços") %></a>
                            </h3>
                        </div>
                    </li>
                </ul>
            </ItemTemplate>
        </asp:Repeater>
    </div>
</form>
</body>




您没有发布所有代码,因此我对发布的代码进行了修改以运行。我没有看到相同的问题,所以它必须与代码没有张贴。这是我修改过的代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Xml;
using System.Globalization;

namespace ConsoleApplication37
{
    class Program
    {
        const string FILENAME = @"c:\temp\test.xml";
        static void Main(string[] args)
        {
            DataTable dt = Test.GetCategorias(FILENAME);
        }
    }
    public class Test
    {
        public static DataTable GetCategorias(string filename)
        {

            DataTable oDataTable = null;
            string[] columnNameList = new string[6] { "NomeDeRegime", "NomeDeDescricao", "NomeDeRegiao", "NomeDeGrupos", "NomeDeServiços", "LinkDeServiços" };
            oDataTable = new DataTable();
            oDataTable.Locale = CultureInfo.InvariantCulture;
            foreach (string columnName in columnNameList)
            {
                oDataTable.Columns.Add(columnName, typeof(string));
            }

            XmlDocument xmlDoc = new XmlDocument();

            xmlDoc.Load(filename);
            XmlNodeList ListaDeRegimes = null;

            ListaDeRegimes = xmlDoc.SelectNodes("//ListaDeRegimes");


            //if (ListaDeRegimes != null)


            foreach (XmlNode Regime in ListaDeRegimes)
            {
                string NomeDeRegime = "";
                string NomeDeDescricao = "";
                string NomeDeRegiao = "";
                string NomeDeGrupos = "";
                string NomeDeServiços = "";
                string LinkDeServiços = "";

                XmlNodeList RegimeList = Regime.SelectNodes("//Regime");

                foreach (XmlNode RegimeNode in RegimeList)
                {
                    NomeDeRegime = RegimeNode.SelectSingleNode("nome").FirstChild.Value;
                    if (RegimeNode.SelectSingleNode("descricao") != null)
                    {
                        NomeDeDescricao = RegimeNode.SelectSingleNode("descricao").FirstChild.Value;
                    }

                    //Listar lista do nome de regiao
                    string[] valueList = valueList = new string[6] { NomeDeRegime, NomeDeDescricao, "", "", "", "" };

                    oDataTable.Rows.Add(valueList);
                    foreach (XmlNode childnodes in RegimeNode.ChildNodes)
                    {
                        if (childnodes.Name == "região")
                        {
                            if (childnodes.Attributes["nome"].Value != null)
                            {
                                NomeDeRegiao = childnodes.Attributes["nome"].Value;
                            }
                            else
                            {
                                NomeDeRegiao = "";
                            }
                            valueList = new string[6] { "", "", NomeDeRegiao, "", "", "" };

                            oDataTable.Rows.Add(valueList);
                            foreach (XmlNode NodeGrupos in childnodes)
                            {
                                if (NodeGrupos.Attributes["nome"] == null)
                                {
                                    NomeDeGrupos = "";

                                }
                                else if (NodeGrupos.Attributes["nome"].Value != null)
                                {
                                    NomeDeGrupos = NodeGrupos.Attributes["nome"].Value;
                                }
                                else
                                {
                                    NomeDeGrupos = "";

                                }
                                valueList = new string[6] { "", "", "", NomeDeGrupos, "", "" };

                                oDataTable.Rows.Add(valueList);

                                foreach (XmlNode NodeServiços in NodeGrupos)
                                {

                                    if (NodeServiços.SelectSingleNode("nome") != null)
                                    {
                                        NomeDeServiços = NodeServiços.SelectSingleNode("nome").FirstChild.Value;

                                        if (NodeServiços.SelectSingleNode("link") != null)
                                        {
                                            LinkDeServiços = NodeServiços.SelectSingleNode("link").FirstChild.Value;

                                        }
                                        else
                                        {
                                            LinkDeServiços = "";

                                        }
                                    }
                                    else
                                    {
                                        NomeDeServiços = "";

                                    }


                                    valueList = new string[6] { "", "", "", "", NomeDeServiços, LinkDeServiços };

                                    oDataTable.Rows.Add(valueList);

                                }
                            }
                        }
                    }

                }
            }
            return oDataTable;
        }
    }
}

谢谢你的回答。嗯,缺少什么代码或者更好,您认为缺少什么?我发布了创建datarow和datacolumns的方法,以及您更改的主要方法。我没有看到任何东西丢失。我还用我的转发器测试了你的代码,并给出了与我相同的问题。然后,必须是显示结果的代码,而不是发布的代码。很抱歉,现在才回答。没有更多的代码,它唯一缺少的是pageload上的repeater1.datasouce=GetCategorias()。没有更多的方法了
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Xml;
using System.Globalization;

namespace ConsoleApplication37
{
    class Program
    {
        const string FILENAME = @"c:\temp\test.xml";
        static void Main(string[] args)
        {
            DataTable dt = Test.GetCategorias(FILENAME);
        }
    }
    public class Test
    {
        public static DataTable GetCategorias(string filename)
        {

            DataTable oDataTable = null;
            string[] columnNameList = new string[6] { "NomeDeRegime", "NomeDeDescricao", "NomeDeRegiao", "NomeDeGrupos", "NomeDeServiços", "LinkDeServiços" };
            oDataTable = new DataTable();
            oDataTable.Locale = CultureInfo.InvariantCulture;
            foreach (string columnName in columnNameList)
            {
                oDataTable.Columns.Add(columnName, typeof(string));
            }

            XmlDocument xmlDoc = new XmlDocument();

            xmlDoc.Load(filename);
            XmlNodeList ListaDeRegimes = null;

            ListaDeRegimes = xmlDoc.SelectNodes("//ListaDeRegimes");


            //if (ListaDeRegimes != null)


            foreach (XmlNode Regime in ListaDeRegimes)
            {
                string NomeDeRegime = "";
                string NomeDeDescricao = "";
                string NomeDeRegiao = "";
                string NomeDeGrupos = "";
                string NomeDeServiços = "";
                string LinkDeServiços = "";

                XmlNodeList RegimeList = Regime.SelectNodes("//Regime");

                foreach (XmlNode RegimeNode in RegimeList)
                {
                    NomeDeRegime = RegimeNode.SelectSingleNode("nome").FirstChild.Value;
                    if (RegimeNode.SelectSingleNode("descricao") != null)
                    {
                        NomeDeDescricao = RegimeNode.SelectSingleNode("descricao").FirstChild.Value;
                    }

                    //Listar lista do nome de regiao
                    string[] valueList = valueList = new string[6] { NomeDeRegime, NomeDeDescricao, "", "", "", "" };

                    oDataTable.Rows.Add(valueList);
                    foreach (XmlNode childnodes in RegimeNode.ChildNodes)
                    {
                        if (childnodes.Name == "região")
                        {
                            if (childnodes.Attributes["nome"].Value != null)
                            {
                                NomeDeRegiao = childnodes.Attributes["nome"].Value;
                            }
                            else
                            {
                                NomeDeRegiao = "";
                            }
                            valueList = new string[6] { "", "", NomeDeRegiao, "", "", "" };

                            oDataTable.Rows.Add(valueList);
                            foreach (XmlNode NodeGrupos in childnodes)
                            {
                                if (NodeGrupos.Attributes["nome"] == null)
                                {
                                    NomeDeGrupos = "";

                                }
                                else if (NodeGrupos.Attributes["nome"].Value != null)
                                {
                                    NomeDeGrupos = NodeGrupos.Attributes["nome"].Value;
                                }
                                else
                                {
                                    NomeDeGrupos = "";

                                }
                                valueList = new string[6] { "", "", "", NomeDeGrupos, "", "" };

                                oDataTable.Rows.Add(valueList);

                                foreach (XmlNode NodeServiços in NodeGrupos)
                                {

                                    if (NodeServiços.SelectSingleNode("nome") != null)
                                    {
                                        NomeDeServiços = NodeServiços.SelectSingleNode("nome").FirstChild.Value;

                                        if (NodeServiços.SelectSingleNode("link") != null)
                                        {
                                            LinkDeServiços = NodeServiços.SelectSingleNode("link").FirstChild.Value;

                                        }
                                        else
                                        {
                                            LinkDeServiços = "";

                                        }
                                    }
                                    else
                                    {
                                        NomeDeServiços = "";

                                    }


                                    valueList = new string[6] { "", "", "", "", NomeDeServiços, LinkDeServiços };

                                    oDataTable.Rows.Add(valueList);

                                }
                            }
                        }
                    }

                }
            }
            return oDataTable;
        }
    }
}