Primo Chalice Ответов: 1

Как сгруппировать дубликаты XML-элементов и сохранить их значения?


- Привет!

Это мой XML-файл:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE repub SYSTEM "C:\repub\Repub_V1.dtd">
<?xml-stylesheet href="C:\repub\repub.xsl" type="text/xsl"?>
<repub>
<head>
<title>xxx</title>
</head>
<body>
<sec>
<title>First Title</title>
<break name="1-1">
<heading><page num="1"/>First Heading</heading>
<bl>This is another text</bl>
<p>This is a paragraph</p>
</break>
</sec>
<sec>
<title>Second Title</title>
<break name="2-1">
<heading><page num="1"/>Second Heading</heading>
<bl>This is another text</bl>
<p>This is a paragraph</p>
</break>
</sec>
<sec>
<title>First Title</title>
<break name="3-1">
<heading><page num="1"/>Third Heading</heading>
<bl>This is another text</bl>
<p>This is a paragraph</p>
</break>
</sec>
<sec>
<title>Third Title</title>
<break name="4-1">
<heading><page num="1"/>Fourth Heading</heading>
<bl>This is another text</bl>
<p>This is a paragraph</p>
</break>
<break name="5-1">
<heading><page num="1"/>Fifth Heading</heading>
<bl>This is another text</bl>
<p>This is a paragraph</p>
</break>
</sec>
</body>
</repub>


Я хочу получить список потомков "разрыва" для каждого раздела. Теперь раздел с повторяющимися именами будет объединен. Я не могу получить правильный список и получить следующий результат:

Цитата:
{ идентификатор = {{ ТТЛ = новости }}, Количество = 9, вл = {система.Коллекции.Универсальный.Список<&ЛТ;&ГТ;Ф__AnonymousType0 в<строка, система.Коллекции.Общий.Интерфейс IEnumerable&ЛТ;система.в формате XML.в LINQ.XElement с&ГТ;&ГТ;&ГТ;} }


Во время отладки, Когда я нажимаю на значения, я получаю следующее:

Цитата:
количество=9
id={ ttl = "новости" }
vl= количество = 9


Теперь, когда я нажимаю на vl, он показывает мне 9 значений следующим образом:

Цитата:
{ ТТЛ = "новости", Валь = {система.В формате XML.В LINQ.XContainer.<getdescendants>d__39} }


Теперь, когда я нажимаю на val, я получаю значения строка за строкой. Я хочу, чтобы эти 9 значений были показаны непосредственно в первом щелчке мыши, в "vl".

Пожалуйста помочь.

С уважением
Аман

Что я уже пробовал:

var anothersectionslist = xdoc.Descendants("sec").SelectMany(br => br.Descendants("break").Select(p => new
{
   ttl = br.Element("title").Value.ToString(), 
   val = br.Descendants()
}))
.GroupBy(x => new { x.ttl }).ToList()
.Select(grp => new
{
   id = grp.Key,
   count = grp.Count(),
   vl = grp.ToList()
}).ToList()
.ToList();

Gerry Schmitz

Это то, что вы получаете, когда не используете промежуточные запросы. Путаница.

Graeme_Grant

Пожалуйста, не задавайте один и тот же вопрос дважды. Первоначально спрашивали здесь: https://www.codeproject.com/Answers/1278202/How-do-I-clear-the-old-values-from-XML-file-in-Csh

1 Ответов

Рейтинг:
0

Maciej Los

Я бы упростил ваш запрос таким образом, из-за многих ненужных звонков ToList():

var anothersectionslist = xdoc.Descendants("sec")
    .GroupBy(x => x.Element("title").Value)
    .Select(grp => new
    {
       id = grp.Key,
       count = grp.Count(),
       vl = grp.SelectMany(x=>x.Descendants("break"))
    })
    .ToList();