У меня есть строка, состоящая из строк XML, которая выглядит следующим образом:
<FIXML>
<TrdCaptRpt TrdTyp = "0" TrdSubTyp = "7" />
</FIXML>
<FIXML>
<TrdCaptRptAck TrdTyp = "0" TrdSubTyp = "7" />
</FIXML>
<FIXML>
<TrdCaptRptAck TrdTyp = "1" />
</FIXML>
У меня есть несколько специализированных запросов LINQ:
var q =
from el in clearingMessagesDoc.Elements("ClearingMessages")
.Elements("FIXML")
.Elements("TrdCaptRpt")
.Where(f => f.Attribute("TrdTyp") != null)
select el.Attribute("TrdTyp");
var t =
from el in q
let trdtyp = el.Value
group trdtyp by trdtyp.Trim() into g
orderby g.Key descending
select new {
TrdType = g.Key,
Count = g.Count()
};
t.Dump("TrdCaptRpt");
q = from el in learingMessagesDoc.Elements("ClearingMessages")
.Elements("FIXML")
.Elements("TrdCaptRpt")
.Where(f => f.Attribute("TrdSubTyp") != null)
select el.Attribute("TrdSubTyp");
var t1 =
from el in q
let trdSubtyp = el.Value
group trdSubtyp by trdSubtyp.Trim() into g
orderby g.Key descending
select new {
TrdSubTyp = g.Key,
Count = g.Count()
};
Это работает, но жестко кодируеттипы отчетов (TrdCaptRpt
, TrdCaptRptAck
и т. д.) в запросах.Как изменить запросы так, чтобы независимо от того, какие типы отчетов могли быть добавлены в будущем, я могу выполнить обобщенный запрос, который сообщит мне число каждого TrdTyp
и TradSubType
, соответствующее тому, имеет ли оно значение TrdCaptRpt
, TrdCaptRptAck
и так далее?
Итак, вопрос в том, как сделать отчет по вложенным атрибутам, если они существуют, проиндексированным по типу отчета.
Я надеюсь получить что-то подобноедля приведенного примера XML:
TrdCaptRpt
TrdTyp = "0" : 1
TrdSubTyp = "7" : 1
TrdCaptRptAck
TrdTyp = "0" : 1
TrdTyp = "1" : 1
TrdSubTyp = "7" : 1
Если бы были какие-либо другие атрибуты, он также предоставил бы отчет о числе этих атрибутов.
-
Ответ Джеффу : Спасибо, это очень, очень близко.Я понял, что я не дал достаточно информации.Файл XML немного сложнее (это лишь малая часть того, как он выглядит для краткости).
<FIXML>
<TrdCaptRpt TrdTyp = "0" TrdSubTyp = "7">
<Hdr Snt="2011-05-18T12:26:09-05:00" />
<RptSide Side="2">
<Pty ID="GS" R="21"></Pty>
</RptSide >
</TrdCaptRpt>
</FIXML>
Другими словами, на каждом уровне может быть много вложенных элементов,Есть ли общий способ получить все это, подсчитав, как часто встречается каждый атрибут, в соответствии с примером, который вы указали индексированным по типу отчета?
Когда я запускаю ваш запрос на XML, который выглядит примерно так,он не опускается ниже TrdCaptRpt.
Спасибо.