Привет,
У меня есть проблема и крайний срок (я просто знаю, что есть некоторые знающие кивки в этом тяжелом положении)
Справочная информация: мне нужно было хранить элементы данных в иерархическойприрода.В двух словах, мой xml - это набор правил, которые инструктируют графический движок рисования ряда рядов на диаграмме в соответствии со строгими отношениями родитель-потомок.то есть серия «могла» использовать для своих исходных данных результирующую серию своего родителя и так далее, и так далее ... или нет.Я думал, что сила этого подхода заключается в том, что если мне когда-либо понадобится удалить родительский ряд, удалить родительский xml-узел будет тривиально просто, и ВСЕ зависимые / дочерние ряды / узлы также будут удалены ... магия работает как шарм.Я почти конвертер LINQ.
У меня было изображение, чтобы проиллюстрировать вывод, но, видимо, я слишком новичок, чтобы позволять публиковать изображения ... так что представьте 4 волнистые линиина диаграмме 3 из них, основанные на предыдущем, и один, живущий крупно, все на своем одиноком .. немое правило публикации изображений, но мне, что ты собираешься делать :-( ..
XML, который представляет этоотношения следующие:
<Chart>
<Chart_Config AxisClear="False">
<Color>white</Color>
<Panels Drawn="True">3</Panels>
<SeriesCount>5</SeriesCount>
<ChartStyle>Candle</ChartStyle>
<DataMode>Daily</DataMode>
</Chart_Config>
<Series ID="0" Drawn="True">
<Name>0.AAC</Name>
<StockCode>AAC</StockCode>
<TID>0</TID>
<IndID>-1</IndID>
<PID>0</PID>
<iType>0</iType>
<Parent>0</Parent>
<Series ID="1" Drawn="True">
<Name>1.SMA</Name>
<StockCode>AAC</StockCode>
<TID>0.AAC</TID>
<IndID>0</IndID>
<PID>2</PID>
<iType>1</iType>
<Parent>0.AAC</Parent>
<Parameters>
<Param Name="Period" Type="Integer" Min="1" Max="999">10</Param>
<Param Name="Color" Type="Color" Min="0" Max="0">0, 0, 192</Param>
<Param Name="Transparency" Type="Integer" Min="0" Max="100">0</Param>
<Param Name="Width" Type="Integer" Min="1" Max="99">2</Param>
</Parameters>
<Series ID="2" Drawn="True">
<Name>2.SMA</Name>
<StockCode>AAC</StockCode>
<TID>1.SMA</TID>
<IndID>0</IndID>
<PID>0</PID>
<iType>1</iType>
<Parent>1.SMA</Parent>
<Parameters>
<Param Name="Period" Type="Integer" Min="1" Max="999">20</Param>
<Param Name="Color" Type="Color" Min="0" Max="0">0, 192, 0</Param>
<Param Name="Transparency" Type="Integer" Min="0" Max="100">0</Param>
<Param Name="Width" Type="Integer" Min="1" Max="99">2</Param>
</Parameters>
<Series ID="3" Drawn="True">
<Name>3.SMA</Name>
<StockCode>AAC</StockCode>
<TID>2.SMA</TID>
<IndID>0</IndID>
<PID>0</PID>
<iType>1</iType>
<Parent>2.SMA</Parent>
<Parameters>
<Param Name="Period" Type="Integer" Min="1" Max="999">30</Param>
<Param Name="Color" Type="Color" Min="0" Max="0">192, 0, 192</Param>
<Param Name="Transparency" Type="Integer" Min="0" Max="100">0</Param>
<Param Name="Width" Type="Integer" Min="1" Max="99">2</Param>
</Parameters>
</Series>
</Series>
</Series>
<Series ID="4" Drawn="True">
<Name>4.SMA</Name>
<StockCode>AAC</StockCode>
<TID>0.AAC</TID>
<IndID>0</IndID>
<PID>3</PID>
<iType>1</iType>
<Parent>0.AAC</Parent>
<Parameters>
<Param Name="Period" Type="Integer" Min="1" Max="999">40</Param>
<Param Name="Color" Type="Color" Min="0" Max="0">192, 0, 0</Param>
<Param Name="Transparency" Type="Integer" Min="0" Max="100">0</Param>
<Param Name="Width" Type="Integer" Min="1" Max="99">2</Param>
</Parameters>
</Series>
</Series>
</Chart>
Проблема, которую я обнаружил, заключается в том, что иногда мне нужно изменить значения в разделе параметров XML-файла, на который я могу ориентироваться и получить требуемый узел ..., но этот узел также содержит любыедочерних узлов. Например, если я получаю XElement с именем «Series» и идентификатором атрибута «2», я также получаю запись Series дляID = 3.
ВОПРОС Часть A: (наконец, я слышу крик) .... с этой существующей структурой, как я могу получить только один из моих элементов Серии, а не его потомков, чтобы я мог обновитьтолько его параметры.
И Часть B: Это правильный способ форматирования моего XML для достижения этого очень полезного отношения родитель-потомок ...
Cheers Snark ...
PS Если вы достаточно любезны, чтобы ответить, могу я вас побеспокоить, чтобы дать минимальное описание того, как работает предлагаемое решение ... Моя первая игра с LINQ to XML и не такая прямолинейная, как я надеялся, я все еще думаю с точки зренияреляционные базы данных.
Прочитав добрые посты, я немного повозился с моим грубым подвигом (разве мы все не скучаем по тем дням, когда элегантный дизайн был тем, о чем говорили только маркетологи, чтобы добиться продажи) ... любым способом.1024 *
/// <summary>
/// Updates Parameters in conjunction with the Modify paramteters Dialog
/// </summary>
/// <param name="Message"></param>
private void UpdateIndicatorParameters(IndicatorParamterUpdate Message)
{
IEnumerable<XElement> result;
/// Find the series
if (Message.isIndicator)
{
result = from e in ChartObj.ChartSeriesXMLRules.Descendants()
where (e.Name.ToString() == "Series" && e.Attribute("ID").Value == Message.IndicatorID)
select e;
}
else
{
// not relevant
}
var NodeOfInterest = result;
/// Find Parameter section
foreach (var el in result)
{
NodeOfInterest = el.Elements("Parameters");
}
/// Find individual paramters
var result2 = from e in NodeOfInterest.Descendants()
where e.Name.ToString() == "Param"
select e;
/// Update required paramter
foreach (var el in result2)
{
if (el.Attribute("Name").Value == Message.ParameterName)
{
el.Value = Message.Value;
}
}
}