3 / 3 / 5
Регистрация: 11.11.2015
Сообщений: 413
1

LINQ to XML: Вывести значения атрибутов из файла

27.01.2016, 10:29. Показов 2629. Ответов 8
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброго времени суток, форумчане!
Подскажите что не так в моём коде, не судите строго новичка
Нужно из XML файла считать значение атрибутов key="timestop"
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
25
26
27
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Reflection;
using System.Xml.Linq;
using System.IO;
using System.Linq;
using System;
 
class Program
{
    static void Main(string[] args)
    {
 
 
        string xmlTag = File.ReadAllText(@"C:\!!!\1.xml");
        XElement xd = XElement.Parse(xmlTag);
        XElement task = xd.Document.Elements()
            .FirstOrDefault(x => (string)x.Attribute("key") == "timestop");
        if (task == null)      //проверка на Null
        {
           var stime = DateTime.Parse(task);  //парсинг даты перед выводом 
            Console.WriteLine(stime);
        }
    }
}
Вложения
Тип файла: txt 1.xml.txt (4.5 Кб, 5 просмотров)
0
Лучшие ответы (1)
27.01.2016, 10:29
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
27.01.2016, 10:29
Ответы с готовыми решениями:

LINQ to XML: Заменить значения атрибутов всего узла
Можно ли заменить значения атрибутов всего узла UserCart для юзера с именем user? Например, <Products_> ...

Как в Java вывести в консоль значения атрибутов из файла XML?
Подскажите как в Java вывести в консоль значения атрибутов из файла XML? Чтобы получались такие строки вывода: Ivanov 12 A red Petrov...

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

8
Эксперт .NET
 Аватар для kolorotur
17796 / 12947 / 3381
Регистрация: 17.09.2011
Сообщений: 21,232
27.01.2016, 10:41 2
Цитата Сообщение от Alex_trader Посмотреть сообщение
Нужно из XML файла считать значение атрибутов key="timestop"
Значение атрибутов на всех уровнях или только на элементах непосредственно в call?

В первом случае используйте Descendants, во втором — Elements с указанием имени элемента.
0
3 / 3 / 5
Регистрация: 11.11.2015
Сообщений: 413
27.01.2016, 10:44  [ТС] 3
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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
<content Version="80903">
  <call commcount="5" taskcount="0">
    <property_simple key="datetimeformat" value="dd.MM.yyyy HH:mm:ss.fff" />
    <property_simple key="direction" value="1" name="cdIncoming" />
    <property_simple key="lineid" value="020508f9-8458-42ea-8032-2514b57c03c2" />
    <property_simple key="linenumber" value="13018" />
    <property_simple key="callerid" value="8422257216" />
    <property_simple key="calledid" value="277878" />
    <property_simple key="idchain" value="1c67eaa9-39df-44f2-9c13-0003c7efe412" />
    <property_cdata key="custominfo" />
    <property_simple key="timestart" value="22.01.2016 10:53:32.516" />
    <property_simple key="timeconnected" value="22.01.2016 10:53:32.547" />
    <property_simple key="timedisconnected" value="22.01.2016 10:57:41.687" />
    <property_simple key="timestop" value="22.01.2016 10:57:42.689" />
    <property_simple key="totalsec" value="250" />
    <property_simple key="emergency" value="0" />
    <property_simple key="callresult" value="busy" />
    <activity>
      <commutation index="0">
        <property_simple key="idconnection" value="039664f5-de99-45c7-92f7-42048f6d9f8f" />
        <property_simple key="type" value="2" name="IVR" />
        <property_simple key="custominfo" value="" />
        <property_simple key="timestart" value="22.01.2016 10:53:32.516" />
        <property_simple key="timestop" value="22.01.2016 10:54:47.831" />
        <property_simple key="totalsec" value="75" />
        <property_simple key="ivrscriptname" value="Главный" />
      </commutation>
      <commutation index="1">
        <property_simple key="idconnection" value="e2dfa6a0-ee77-4205-b15f-6f828fba72ff" />
        <property_simple key="type" value="1" name="Abonent" />
        <property_simple key="custominfo" value="" />
        <property_simple key="timestart" value="22.01.2016 10:54:48.284" />
        <property_simple key="timestop" value="22.01.2016 10:55:04.201" />
        <property_simple key="totalsec" value="15" />
        <abonents count="1">
          <abonent index="1">
            <property_simple key="lineid" value="2ea8e1e0-d06b-4d2b-8ccd-f7500b061267" />
            <property_simple key="linenumber" value="17034" />
            <property_simple key="callerid" value="" />
            <property_simple key="userid" value="c5b1d775-37e6-4960-a4cc-29f5c433e098" />
            <property_simple key="username" value="Крюкова К.В." />
          </abonent>
        </abonents>
      </commutation>
      <commutation index="2">
        <property_simple key="idconnection" value="b66712fd-44eb-4a76-a584-0bc761ae248d" />
        <property_simple key="type" value="2" name="IVR" />
        <property_simple key="custominfo" value="" />
        <property_simple key="timestart" value="22.01.2016 10:55:06.350" />
        <property_simple key="timestop" value="22.01.2016 10:55:15.086" />
        <property_simple key="totalsec" value="8" />
        <property_simple key="ivrscriptname" value="(Служебный)Маршрутизация переключения v3_0" />
      </commutation>
      <commutation index="3">
        <property_simple key="idconnection" value="703ab2da-54bd-4a8c-8b5d-ae4a33b81ed0" />
        <property_simple key="type" value="1" name="Abonent" />
        <property_simple key="custominfo" value="" />
        <property_simple key="timestart" value="22.01.2016 10:55:16.180" />
        <property_simple key="timestop" value="22.01.2016 10:57:41.515" />
        <property_simple key="totalsec" value="145" />
        <abonents count="1">
          <abonent index="1">
            <property_simple key="lineid" value="5dafbc5b-f2ec-4da1-867c-fb2a9cd31944" />
            <property_simple key="linenumber" value="17084" />
            <property_simple key="callerid" value="" />
            <property_simple key="userid" value="56bf919a-a38c-4054-b5cc-15e459b8ebc9" />
            <property_simple key="username" value="Вольнева Е.А." />
          </abonent>
        </abonents>
      </commutation>
      <commutation index="4">
        <property_simple key="idconnection" value="8b4243a4-3394-4a40-bed8-2d96b73915d1" />
        <property_simple key="type" value="2" name="IVR" />
        <property_simple key="custominfo" value="" />
        <property_simple key="timestart" value="22.01.2016 10:57:41.672" />
        <property_simple key="timestop" value="22.01.2016 10:57:41.672" />
        <property_simple key="totalsec" value="0" />
        <property_simple key="ivrscriptname" value="_Сценарий возврата" />
      </commutation>
    </activity>
  </call>
</content>
Добавлено через 1 минуту
Всех где есть атрибут key="timestop"

Добавлено через 1 минуту
Цитата Сообщение от kolorotur Посмотреть сообщение
Значение атрибутов на всех уровнях или только на элементах непосредственно в call?
В первом случае используйте Descendants, во втором — Elements с указанием имени элемента.
Всех где есть атрибут key="timestop"

Если можно то поконкретнее бы...
0
Эксперт .NET
 Аватар для kolorotur
17796 / 12947 / 3381
Регистрация: 17.09.2011
Сообщений: 21,232
27.01.2016, 10:55 4
Лучший ответ Сообщение было отмечено Alex_trader как решение

Решение

Цитата Сообщение от Alex_trader Посмотреть сообщение
Если можно то поконкретнее бы...
C#
1
2
3
4
5
6
var dates = from prop in xd.Descendants("property_simple")
            where (string)prop.Attribute("key") == "timestop"
            select DateTime.ParseExact((string)prop.Attribute("value"), "dd.MM.yyyy HH:mm.ss.fff");
 
foreach (var date in dates)
   Console.WriteLine(date);
1
3 / 3 / 5
Регистрация: 11.11.2015
Сообщений: 413
27.01.2016, 11:15  [ТС] 5
Visual Studio "ругается" метод ParseExact - ни одна из перегрузок метода не принимает 2 аргументов
и на dates в foreache - оператор foreach не работает с переменными типа "?"
0
Эксперт .NET
 Аватар для kolorotur
17796 / 12947 / 3381
Регистрация: 17.09.2011
Сообщений: 21,232
27.01.2016, 11:24 6
Цитата Сообщение от Alex_trader Посмотреть сообщение
метод ParseExact - ни одна из перегрузок метода не принимает 2 аргументов
Ой, третьим аргументом в ParseExact допишите null. Забыл.

Вторая ошибка — следствие первой.
0
3 / 3 / 5
Регистрация: 11.11.2015
Сообщений: 413
27.01.2016, 12:05  [ТС] 7
Всё равно ошибка в строке:" DateTime.ParseExact((string)prop.Attribute("value"), "dd.MM.yyyy HH:mm.ss.fff", null);"

Необработанное исключение типа "System.FormatException" в mscorlib.dll

Дополнительные сведения: Строка не распознана как действительное значение DateTime.

Добавлено через 35 минут
Спасибо исправил
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
25
26
27
28
29
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Reflection;
using System.Xml.Linq;
using System.IO;
using System.Linq;
using System;
 
 
class Program
{
    static void Main(string[] args)
    {
 
      
        string xmlTag = File.ReadAllText(@"C:\!!!\1.xml");
        XElement xd = XElement.Parse(xmlTag);
 
        var dates = from prop in xd.Descendants("property_simple")
                    where (string)prop.Attribute("key") == "timestop"
           select DateTime.Parse((string)prop.Attribute("value"));
 
foreach (var date in dates)
   Console.WriteLine(date);
        Console.ReadKey();
    }
}
0
Эксперт .NET
 Аватар для kolorotur
17796 / 12947 / 3381
Регистрация: 17.09.2011
Сообщений: 21,232
27.01.2016, 13:17 8
Цитата Сообщение от Alex_trader Посмотреть сообщение
Необработанное исключение типа "System.FormatException" в mscorlib.dll
Что-то я сегодня какой-то невнимательный.
Строка формата должна быть, конечно же, такой: dd.MM.yyyy HH:mm:ss.fff
В моем первом варианте зачем-то между минутами и секундами стоит точка, а не двоеточие.

Цитата Сообщение от Alex_trader Посмотреть сообщение
Спасибо исправил
C#
1
DateTime.Parse((string)prop.Attribute("value"))
У меня специально парсинг сделан с явным указанием формата, т.к. именно такой формат используется в файле.
В вашем исправленном варианте дата будет парситься с учетом текущих региональных настроек, установленных в системе.
Например, на моем компе ваша программа работать уже не будет, т.к. у меня на компе дата будет парситься по умолчанию в формате "MM/dd/yyyy hh:mm:ss.fff tt".
1
3 / 3 / 5
Регистрация: 11.11.2015
Сообщений: 413
27.01.2016, 21:17  [ТС] 9
Спасибо за помощь, в данной проге формат данных не был важен
0
27.01.2016, 21:17
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
27.01.2016, 21:17
Помогаю со студенческими работами здесь

LINQ to XML. NullReferenceExeption при чтении атрибутов
Здравствуйте. Нужна помощь, пробую распарсить ствоку но выдает NullReferenceExeption. Сделал похожый пример, он работает нормально. ...

LINQ 2 XML Получение атрибутов дочерних элементов
имеется XML файл вида &lt;Root&gt; &lt;Elements Name=&quot;NAME&quot;&gt; &lt;Element Atr1=&quot;atr1&quot; Atr2=&quot;atr2&quot; /&gt; &lt;Element...

LINQ to XML | Замена атрибутов во всем документе
Добрый день, помогите решить проблему. Дан XML-документ. Изменить имена атрибутов всех элементов, добавив слева к исходному имени...

Из XML-файла извлечь значения его атрибутов в массив типа std::vector<int>
Всем привет. Есть XML-файл, из которого требуется извлечь значения его атрибутов. Подскажите, пожалуйста, несколько способов это сделать...

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


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

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

Редактор формул (кликните на картинку в правом углу, чтобы закрыть)
Опции темы

Новые блоги и статьи
Linux API: Полное руководство
hw_wired 08.02.2025
Linux API – это низкоуровневый программный интерфейс, обеспечивающий взаимодействие пользовательских приложений с ядром операционной системы. Он включает набор системных вызовов, библиотечных функций. . .
Асинхронное программировани­­­­­е и эмуляция async/await в C (СИ)
hw_wired 08.02.2025
Язык программирования C, несмотря на свой возраст, предоставляет неплохие средства для реализации асинхронных операций, позволяя создавать эффективные решения для обработки параллельных задач. В. . .
Как сгенерировать случайное число в указанном диапазоне в JavaScript
bytestream 08.02.2025
В JavaScript генерация случайных чисел основана на детерминированном алгоритме, который создает последовательность псевдослучайных значений. Встроенный метод Math. random() возвращает псевдослучайное. . .
Как получить список всех таблиц в PostgreSQL
bytestream 08.02.2025
PostgreSQL предлагает несколько методов для получения списка таблиц в базе данных. Наиболее распространенный способ - использование системного каталога pg_tables, который содержит информацию обо всех. . .
Java Spring для начинающих
bytestream 08.02.2025
Spring Framework - это универсальное решение для создания корпоративных Java-приложений. Он предоставляет комплексную программную и конфигурационную модель для современных приложений на Java. Spring. . .
Асинхронное программировани­­­­­­е и async/await в Visual Basic
bytestream 08.02.2025
В основе асинхронного программирования в Visual Basic лежит концепция неблокирующего выполнения операций. Когда программа встречает длительную операцию, например, чтение большого файла или запрос к. . .
Async/await и асинхронное программировани­­е в Delphi
bytestream 08.02.2025
Асинхронное программирование является неотъемлемой частью разработки современных приложений, позволяя создавать отзывчивые и эффективные программы. В Delphi реализация асинхронности опирается на. . .
Асинхронное программировани­­­­­е и async/await в C#
bytestream 08.02.2025
Асинхронное программирование - концепция, позволяющая приложениям эффективно выполнять длительные операции без блокировки основного потока выполнения. В контексте современной разработки на C# это. . .
Асинхронное программировани­­­­­е и горутины/каналы в Go
bytestream 08.02.2025
Язык Go изначально разрабатывался с учетом современных многоядерных процессоров и необходимости эффективного параллельного выполнения задач. В отличие от традиционных подходов к асинхронному. . .
Как восстановить stash в Git
hw_wired 08.02.2025
Git stash - это средство для временного сохранения изменений в рабочей директории. В процессе разработки часто возникают ситуации, когда нужно быстро переключиться на другую задачу, но текущие. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru