C# Asp.net中继器中的XML分层数据绑定
大家好,我希望你们周末过得愉快 我有一个asp.net中继器,它从XML文件接收数据,此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
<?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;
}
}
}