С наступающим Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы
LINQ
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
tomsoer
0 / 0 / 0
Регистрация: 23.02.2017
Сообщений: 4
1

Linq XML - повторяющийся атрибут

23.02.2017, 09:32. Просмотров 520. Ответов 2
Метки linq, xml (Все метки)

Здравствуйте!
Помогите решить проблему. Есть код:
C#
1
2
3
4
5
6
XDocument doc = new XDocument(
new XElement("Cards",
new XElement("Card", new XAttribute("number", labelCard.Text)),
listarticle.Select(i => new XElement("product", new XAttribute("article", i),
listcount.Select(a => new XAttribute("counts", a))))));
doc.Save(@"../data/report/" + labelCard.Text + ".xml");
Компилятор выдает ошибку на повторяющийся атрибут.

XML должен выглядеть так:

XML
1
2
3
4
5
6
7
8
<?xml version="1.0" encoding="utf-8"?>
<Cards>
  <Card number="555888">
    <product article="..." count="..."/>
    <product article="..." count="..."/>
    <product article="..." count="..."/>
  </Card>
</Cards>
Если просто listcount сократить до new XAttribute и принудительно вписать, то работает.
C#
1
2
3
4
5
6
XDocument doc = new XDocument(
new XElement("Cards",
new XElement("Card", new XAttribute("number", labelCard.Text)),
listarticle.Select(i => new XElement("product", new XAttribute("article", i),
new XAttribute("counts", "2")))));
doc.Save(@"../data/report/" + labelCard.Text + ".xml");
Добавлено через 19 минут
Не нашел как отредактировать пост(
Вот полный код (кнопка):
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
{
int rowcol = checkGrid.RowCount;
List<string> listarticle = new List<string>();
List<string> listcount = new List<string>();
for (int q = 1; q <= rowcol; ++q)
{
string article = Convert.ToString(checkGrid[q, 7].FormattedText);
string count = Convert.ToString(checkGrid[q, 2].FormattedText);
listarticle.Add(article);
listcount.Add(count);
}
XDocument doc = new XDocument(
new XElement("Cards",
new XElement("Card", new XAttribute("number", labelCard.Text)),
listarticle.Select(i => new XElement("product", new XAttribute("article", i),
listcount.Select(a => new XAttribute("counts", a))))));
doc.Save(@"../data/report/" + labelCard.Text + ".xml");
}
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.02.2017, 09:32
Ответы с готовыми решениями:

При помощи LINQ to XML считать параметры из XML
Помогите при помощи LINQ to XML считать следующие параметры из XML: id, first_name, last_name ...

Парсинг XML-файла с помощью LINQ to XML
Здрасивуйте. Трабл никак не могу понять в чем дело не могу считать инфу с XML login, getWorkersOUs...

LINQ to XML: использование атрибутов
привет всем, нужна помощь, в шарпе не силён есть вот такой кусок кода: XDocument xDocument =...

LINQ to XML Null Reference
часть документа XML, таких несколько элементов &lt;weather&gt; &lt;date&gt;2014-05-31&lt;/date&gt; ...

Xml linq добавить поле
Программно создаю следующий xml документ &lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt; &lt;library&gt; ...

2
OwenGlendower
Супер-модератор
Эксперт .NET
9698 / 8440 / 3614
Регистрация: 17.03.2014
Сообщений: 16,897
Записей в блоге: 1
23.02.2017, 10:29 2
tomsoer, правила XML запрещают иметь несколько одинаковых атрибутов на одном узле, а ты именно это и делаешь в данном куске кода (отформатировано для лучшего понимания):
C#
1
2
3
4
new XElement("product",
    new XAttribute("article", i),
    listcount.Select(a => new XAttribute("counts", a))
)
Нужно как-то так делать:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
int rowcol = checkGrid.RowCount;
List<string> listarticle = new List<string>(rowcol);
List<string> listcount = new List<string>(rowcol);
for (int q = 1; q <= rowcol; ++q)
{
    string article = Convert.ToString(checkGrid[q, 7].FormattedText);
    string count = Convert.ToString(checkGrid[q, 2].FormattedText);
    listarticle.Add(article);
    listcount.Add(count);
}
 
XElement xcard = new XElement("Card", new XAttribute("number", labelCard.Text));
for (int i=0; i<rowCount; i++)
{
    xcard.Add(new XElement("product", 
        new XAttribute("article", listarticle[i]),
        new XAttribute("counts", listcount[i])
    ));
}
 
XDocument doc = new XDocument(
    new XElement("Cards", xcard)
);
doc.Save(@"../data/report/" + labelCard.Text + ".xml");
0
tomsoer
0 / 0 / 0
Регистрация: 23.02.2017
Сообщений: 4
23.02.2017, 11:20  [ТС] 3
Спасибо БОЛЬШОЕ!)
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.02.2017, 11:20

Не работает linq to xml запрос
Здравствуйте. У меня есть вот такой xml &lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt; -&lt;export...

Linq и xml (добавить элемент)
Здравствуйте, помогите пожалуйста люди добрые. Имеется xml файл со следующим ветвением: ...

Возможная прибыль. linq to xml
Здравствуйте! Есть два файла: 1)Товары -код (уникальный) -название (возможны повторы)...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru