Мне нужно получить данные из XML-файла из Node1> Node2
Фильтрация данных для группировки из xml по X-узлу, где узел X равен A, Y, Z ..
Сгруппируйте все элементы с одинаковым значением X-узла, упорядоченным по дате
Сохраните первый элемент группы (в порядке упорядочения по дате будет самым последним), а остальные элементы - в подгруппе того же объекта.
Если в фильтре не удается найти один узел, равный (A, X или Z), то он создает первый элемент с жестко закодированными данными для первого элемента.
После завершения этого процесса отправьте объект (список).<>) к повторителю.
У меня есть почти все, но я не знаю, как это сделать, когда фильтру не удается найти узел, равный (A, X или Z) * 1013 *
Пример кода.
private void BindOutputRepeaterLongTermCondition()
{
XDocument xd = XDocument.Parse(element.OuterXml);
if (xd != null)
{
var results = (from el1 in xd.Descendants("Node1")
from el2 in el1.Descendants("Node2")
where el2.Element("Date") != null
&&(el2.Element("Code").Value.StartsWith("A")
|| el2.Element("Code").Value.StartsWith("Y")
|| el2.Element("Code").Value.StartsWith("Z")
|| el2.Element("Code").Value.StartsWith("B")
)
orderby el2.Element("Date").Value descending
group el2 by el2.Element("Code").Value
into CodeGroup
select new Table(CodeGroup.First())
{
SubTable = (from subCodes in CodeGroup
select new Table(subCodes)).Skip(1).ToList()
}).ToList<Table>();
this.repeaterTable.DataSource = results;
this.repeaterTable.DataBind();
}
}
protected void repeater_Table_ItemDataBound(object sender, System.Web.UI.WebControls.RepeaterItemEventArgs e)
{
RepeaterItem item = e.Item;
if ((item.ItemType == ListItemType.Item) || (item.ItemType == ListItemType.AlternatingItem))
{
var recentTable = (Table)item.DataItem;
var TableRepeater = (Repeater)item.FindControl("rptSubTable");
TableRepeater.DataSource = recentTable.SubTable;
TableRepeater.DataBind();
}
}
}
public class Table
{
public string Date { get; set; }
public string Rubric { get; set; }
public string Value { get; set; }
public List<Table> SubTable { get; set; }
public Table(XElement xml)
{
Date = xml.Element("Date") != null ? xml.Element("Date").Value : "";
Code = xml.Element("Code") != null ? xml.Element("Code").Value : "";
var a = (string)xml.Element("Code").Value;
if (a.StartsWith("A"))
{
Name = "Row 1";
}
else if (a.StartsWith("Y"))
{
Name = "Row 2";
}
else if (a.StartsWith("Z"))
{
Name = "Row 3";
}
else if (a.StartsWith("B"))
{
Name = "Row 4";
}
//Tried the following but it does not work.
else if (!a.StartsWith("A") && !a.StartsWith("Y") && !a.StartsWith("B")){
Name = "Row 3";
Value = "Not Found";
}
}
}
Пример кода XML
<Node1>
<Node2>
<Date>2009-07-16</Date>
<Code>A</Code>
<Value>Some Value</Value>
</Node2>
<Node2>
<Date>2008-02-09</Date>
<Code>Y</Code>
<Value>Some Value</Value>
</Node2>
<Node2>
<Date>2008-02-09</Date>
<Code>Z</Code>
<Value>Some Value</Value>
</Node2>
<Node2>
<Date>2008-07-16</Date>
<Code>A</Code>
<Value>Some Value</Value>
</Node2>
<Node2>
<Date>2006-02-09</Date>
<Code>Y</Code>
<Value>Some Value</Value>
</Node2>
<Node2>
<Date>2001-02-09</Date>
<Code>Z</Code>
<Value>Some Value</Value>
</Node2>
</Node1>
Любая помощь приветствуется.
Обновление Проблема заключается в том, чтоМне нужно отобразить все элементы, независимо от того, находятся они на XML или нет.На данный момент я могу отображать только существующие элементы.Если один из элементов (по «Коду») не найден, мне нужно отобразить жестко закодированное имя элемента и значение «Нет значения».