Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
 Аватар для Egor.S
215 / 180 / 79
Регистрация: 02.10.2011
Сообщений: 651

Выборка XPath: сумма полей в ряду

22.12.2014, 20:19. Показов 1529. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
XML
1
2
3
4
5
<Табл>
<Ряд полераз="1" поледва="2"></Ряд>
<Ряд полераз="1"></Ряд>
<Ряд поледва="2"></Ряд>
</Табл>
В хмл встречается вот такой участок, рядов может быть сколько угодно много, поля не обязательны.
Но мне нужно посчитать сумму полей в ряде, если они оба присутствуют, как это сделать?
Если селектом выбирать сразу все поля, и если одно из полей в ряду не присутствует, то ничего не приходит, даже null.


Подозреваю, что как-то так
C#
1
var rows = nav.Select("/ТаблСчФакт/Ряд/)
И потом c помощью foreach перебирать и выбирать нужные значение, только как это сделать?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
22.12.2014, 20:19
Ответы с готовыми решениями:

XPath выборка и массивы
Доброго времени суток. Столкнулся с такой проблемкой: Существует xml файл вида: &lt;ItemBase&gt; &lt;Items Level=&quot;%Level%&quot;...

Нужно чтоб текст который вводится появлялся в 15 ряду и начал двигаться по горизонтали пока не появится в 16 ряду в начале
Нужно чтоб текст который вводится появлялся в 15 ряду и начал двигаться по горизонтали пока не появится в 16 ряду в начале , очень прошу...

Выборка названий полей
Добрый вечер! Есть код: $query_table=$mysqli-&gt;query(&quot;SHOW COLUMNS FROM `users`&quot;); $array_table=$query_table-&gt;fetch_assoc(); ...

14
foo();
 Аватар для rattrapper
886 / 587 / 222
Регистрация: 03.07.2013
Сообщений: 1,549
Записей в блоге: 2
22.12.2014, 20:51
Egor.S,
Code
1
sum(//Табл/Ряд[@полераз and @поледва]/attribute::*)
Добавлено через 4 минуты
ой. так вообще можно:
Code
1
sum(//Табл/Ряд[@полераз and @поледва]/@*)
Добавлено через 1 минуту
и тестер еще пригодится
2
 Аватар для Egor.S
215 / 180 / 79
Регистрация: 02.10.2011
Сообщений: 651
22.12.2014, 21:06  [ТС]
rattrapper, а можно как-нибудь получить две коллекции, первая [1,1,2] вторая [2,null,null]
0
foo();
 Аватар для rattrapper
886 / 587 / 222
Регистрация: 03.07.2013
Сообщений: 1,549
Записей в блоге: 2
22.12.2014, 21:15
Egor.S, а разве не должно быть [1, 1, null]; [2, null, 2]?
1
 Аватар для Egor.S
215 / 180 / 79
Регистрация: 02.10.2011
Сообщений: 651
22.12.2014, 21:26  [ТС]
rattrapper, дада, имеено, прошу прощения.
0
foo();
 Аватар для rattrapper
886 / 587 / 222
Регистрация: 03.07.2013
Сообщений: 1,549
Записей в блоге: 2
22.12.2014, 21:30
Egor.S, честно говоря, в таком виде не представляю как это сделать через XPath. Зато, это будет несложно реализовать в коде. Возможно, если вы уточните задание (для чего нужны эти массивы), получится еще что-то придумать
1
 Аватар для Egor.S
215 / 180 / 79
Регистрация: 02.10.2011
Сообщений: 651
22.12.2014, 21:35  [ТС]
rattrapper, вот у меня много таких "рядов" и нужно посчитать сумму, если существует поле 1 и поле 2. Далее сложить все эти суммы и сравнить с неким числом, которое заранее известно.
0
foo();
 Аватар для rattrapper
886 / 587 / 222
Регистрация: 03.07.2013
Сообщений: 1,549
Записей в блоге: 2
22.12.2014, 21:41
Цитата Сообщение от Egor.S Посмотреть сообщение
нужно посчитать сумму
сумму чего?

Добавлено через 1 минуту
вот код для получения столбика
C#
1
2
3
4
5
6
7
8
9
10
var xml = @"<Table>
<Row field1=""1"" field2=""2""></Ряд>
<Row field1=""1""></Ряд>
<Row field2=""2""></Ряд>
</Table>";
XDocument doc = XDocument.Parse(xml);
int?[] col1 = doc.Element("Table").Elements("Row")
     .Select(r => r.Attribute("field1"))
     .Select(a => a != null ? (int?) int.Parse(a.Value) : null)
     .ToArray();
1
 Аватар для Egor.S
215 / 180 / 79
Регистрация: 02.10.2011
Сообщений: 651
22.12.2014, 21:42  [ТС]
rattrapper, сумму полей в ряде
0
foo();
 Аватар для rattrapper
886 / 587 / 222
Регистрация: 03.07.2013
Сообщений: 1,549
Записей в блоге: 2
22.12.2014, 21:49
Egor.S, так все получается, смотрите:
XML
1
2
3
4
5
6
<Table>
    <Row field1="1" field2="2"></Row>
    <Row field1="16"></Row>
    <Row field1="4" field2="8"></Row>
    <Row field2="32"></Row>
</Table>
на запрос XPath : sum(//Table/Row[@field1 and @field2]/@*) выдает ответ: 15
Разве это не то, что нужно???
1
 Аватар для Egor.S
215 / 180 / 79
Регистрация: 02.10.2011
Сообщений: 651
22.12.2014, 22:16  [ТС]
rattrapper, а как такой sum(//Table/Row[@field1 and @field2]/@*) запрос применить в C# коде?
0
foo();
 Аватар для rattrapper
886 / 587 / 222
Регистрация: 03.07.2013
Сообщений: 1,549
Записей в блоге: 2
22.12.2014, 22:41
Egor.S,
C#
1
2
3
4
5
6
7
8
9
var xml = @"<Table>
<Row field1=""1"" field2=""2""></Row>
<Row field1=""16""></Row>
<Row field1=""4"" field2=""8""></Row>
<Row field2=""32""></Row>
</Table>";
var query = @"sum(//Table/Row[@field1 and @field2]/@*)";
XDocument doc = XDocument.Parse(xml);
Console.WriteLine(doc.CreateNavigator().Evaluate(query));
1
 Аватар для Egor.S
215 / 180 / 79
Регистрация: 02.10.2011
Сообщений: 651
23.12.2014, 15:00  [ТС]
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
<?xml version="1.0" encoding="UTF-8"?>
<Файл xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" ИдФайл="ON_SFAKT_2TS85ae8ea5-e993-4627-95c4-839b926c6591_2TS42EF884D-EEE6-4973-A90A-063EC419C6A7_20141210_3f71cf69-5541-4162-b4fa-bac5639677ca" ВерсПрог="1.0" ВерсФорм="5.21">
   <СвУчДокОбор ИдОтпр="2TS42EF884D-EEE6-4973-A90A-063EC419C6A7" ИдПок="2TS85ae8ea5-e993-4627-95c4-839b926c6591">
      <СвОЭДОтпр НаимОрг="synerdocs" ИННЮЛ="7728075928" ИдЭДО="2TS" />
   </СвУчДокОбор>
   <Документ КНД="1115101">
      <СвСчФакт НомерСчФ="123" ДатаСчФ="10.12.2014" КодОКВ="643">
         <СвПрод>
            <ИдСв>
               <СвФЛ ИННФЛ="263506295502">
                  <ФИОИП Фамилия="Пупкин" Имя="Василий" Отчество="Рафикович" />
               </СвФЛ>
            </ИдСв>
            <Адрес>
               <АдрРФ КодРегион="18" Город="пва" />
            </Адрес>
         </СвПрод>
         <ГрузОт>
            <ОнЖе>он же</ОнЖе>
         </ГрузОт>
         <СвПокуп>
            <ИдСв>
               <СвФЛ ИННФЛ="183505680965">
                  <ФИОИП Фамилия="Щепина" Имя="Анастасия" Отчество="Васильевна" />
               </СвФЛ>
            </ИдСв>
            <Адрес>
               <АдрРФ Индекс="426000" КодРегион="18" Город="г.Ижевск" Улица="ул. К.Маркса. дом 2" />
            </Адрес>
         </СвПокуп>
      </СвСчФакт>
      <ТаблСчФакт>
         <СведТов НомСтр="1" НаимТов="test" ОКЕИ_Тов="796" КолТов="0" ЦенаТов="0" СтТовБезНДС="0" СтТовУчНал="0">
            <Акциз СумАкциз="без акциза" />
            <НалСт НалСтВел="18" НалСтТип="процент" />
            <СумНал СумНДС="-" />
            <КодПроисх>643</КодПроисх>
         </СведТов>
         <ВсегоОпл СтТовБезНДСВсего="0.00" СтТовУчНалВсего="0.00">
            <СумНалВсего СумНДС="без НДС" />
         </ВсегоОпл>
      </ТаблСчФакт>
      <Подписант>
         <ИП ИННФЛ="263506295502" СвГосРегИП="...some words here... and №um83r5">
            <ФИО Фамилия="Иванов" Имя="Иван" Отчество="Васильевич" />
         </ИП>
      </Подписант>
   </Документ>
</Файл>
XML
1
 var a = nav.Evaluate(@"sum(/Файл/Документ/ТаблСчФакт/СведТов[@ЦенаТов and @КолТов]/@*)");
Почему NaN приходит?

Добавлено через 5 часов 52 минуты
и если произведение нужно или деление ?
0
Заблокирован
23.12.2014, 15:21
Egor.S, а вам XPath обязательно использовать? Может обычные методы linq2xml тоже подойдут?
0
 Аватар для Egor.S
215 / 180 / 79
Регистрация: 02.10.2011
Сообщений: 651
23.12.2014, 15:26  [ТС]
Ev_Hyper, я разобрался

C#
1
2
3
4
5
6
7
8
 var c = xml.SelectNodes("/Файл/Документ/ТаблСчФакт/СведТов");
 
 
            foreach (XmlNode pr in c)
            {
                var a = pr.Attributes["КолТов"];
                var b = pr.Attributes["ЦенаТов"];
            }
Как-то так
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
23.12.2014, 15:26
Помогаю со студенческими работами здесь

Выборка полей из базы
Здраствуйте. Возник такой вопрос как выбрать из базы N полей выбранных абсолютно случайным образом. этот запрос должен быть...

Выборка не повторяющихся полей
всем привет,нужна ваша помощь: есть такой запрос Select t1.per_saldo_flat_id, t1.lc_id, t1.date_id , t1.sal_begin, t1.sal_benefit,...

Выборка полей из DataSet
Как из DataSet выбрать только определенное количество полей и использовать их как ItemSource для DataGrid? DataGrid.ItemSource =...

Выборка одинаковы полей
Добрый день, столкнулся с проблемой: нужно выбрать строки с одинаковыми значениями в двух полях. В Oracle это можно сделать так: ...

Выборка пустых полей
Доброго времени суток!! Имеется база(см. вложения) И есть запрос: SELECT Ремонт.Код, Ремонт., Клиенты.Фамилия, Клиенты.,...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru