首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Asp.net转发器中的XML分层数据绑定

Asp.net转发器中的XML分层数据绑定
EN

Stack Overflow用户
提问于 2018-04-21 19:35:06
回答 1查看 94关注 0票数 0

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

我有一个从XML文件接收数据的asp.net中继器,这个XML文件有这样的数据:

代码语言:javascript
复制
<?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>

问题是,它一直在重复可为空的数据。输出应如下所示:

但是输出结果是这样的:

你能帮帮我吗?我还会将代码粘贴到c#中。而且我在创建这个中继器时有很多限制,在我的项目中,包含这些代码的机器有.net框架1,即使我想要更新那个框架,我也不被允许这样做。我还将添加一个实现,如果存在querystring,它将过滤xml文件(这部分我不需要帮助)。

这是用C#编写的代码:

代码语言:javascript
复制
        public DataTable GetCategorias()
    {

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

        XmlDocument xmlDoc = new XmlDocument();
        string xmlPath;

        xmlPath = @"C:\Users\Utilizador\Desktop\ListagemdeServiços.xml";
        xmlDoc.Load(xmlPath);
        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 = DataTableAddRow(oDataTable, 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 = DataTableAddRow(oDataTable, 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 = DataTableAddRow(oDataTable, 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 = DataTableAddRow(oDataTable, valueList);

                            }
                        }
                    }
                }

            }
        }



        return oDataTable;
    }

这是用于创建datatable的代码。

代码语言:javascript
复制
        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;
        }
    }

这是源端的中继器。

代码语言:javascript
复制
<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>
EN

回答 1

Stack Overflow用户

发布于 2018-04-21 23:10:48

你没有发布所有的代码,所以我对发布的代码进行了修改才能运行。我没有看到同样的问题,所以一定是代码没有发布。以下是我修改后的代码:

代码语言:javascript
复制
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;
        }
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49955330

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档