Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.82/11: Рейтинг темы: голосов - 11, средняя оценка - 4.82
4 / 4 / 1
Регистрация: 09.10.2019
Сообщений: 247
.NET 3.x

Прочитать Xml файл, XPath

09.10.2019, 23:16. Показов 2529. Ответов 6

Студворк — интернет-сервис помощи студентам
Доброго времени суток!

Пытаюсь на C# просмотреть(прочитать, распарсить, как угодно называйте, не придирайтесь, терминологией в совершенстве не владею, за что заранее прошу прощения).
Пытался с помощью XPath, и никак...
Сам файлик прикладываю, в гугле не забанили, но мне не хватает той информации, которую нашёл, например, здесь:
https://docs.microsoft.com/ru-... navigation
или здесь:
http://zvon.org/xxl/XPathTutor... mples.html
Хочется объяснения мелкими шагами.

Notepad++ на XML ругается, но IE открывает, и, в принципе, удалил ту строку, Notepad++ всё равно ругается.
Был бы признателен за работающий код, в котором бы читалось хотя бы 2 узла, дальше, думаю, додумаю.
Свои потуги прикладывать не буду - писал и комментировал, ну, например(одна из крайних попыток):

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
       static void Main(string[] args)
        {
            XmlDocument doc = new XmlDocument();
            doc.Load("#PMRPT0103192910668020.XML");
            XmlNode root = doc.DocumentElement;
 
            XmlNamespaceManager nsmgr = new XmlNamespaceManager(doc.NameTable);
            //nsmgr.AddNamespace("gl", "paymentmessages");
            //XmlNode fNode = root.SelectSingleNode("descendant::gl:AppHdr", nsmgr);
            XmlNode fc = root.FirstChild;
            nsmgr.AddNamespace("Hdr", "urn:iso:std:iso:20022:tech:xsd:head.001.001.01");
            XmlNode fNode = fc.SelectSingleNode("fr", nsmgr);
 
            //XmlNodeList nn = fc.SelectNodes("fr/");
            Console.WriteLine(fc.Name);
            
        }
Проблема - ни SelectSingleNode, ни SelectNodes не выбирают ничего... Как правильно?

Спасибо!
Вложения
Тип файла: zip 11.zip (1.3 Кб, 6 просмотров)
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
09.10.2019, 23:16
Ответы с готовыми решениями:

Прочитать xml файл, желательно через XmlDocument
<response retval='0' sval='Success' lastAccess='1/10/2012 11:33:57 AM' expires='1/10/2012 11:53:57 AM' /> Не могу получить значения...

Прочитать XML файл и вывести трехуровневое дерево информации
Доброго всем форумчанинам, задался попытаться сделать программу для вывода информации в Datagridview с неограниченным (по возможности)...

Как записать/прочитать многострочный текст в XML файл?
Предполагаю сохранять настройки приложения в XML файл. Для этого использую следующий код. Props.cs using System; //надо добавить...

6
 Аватар для diadiavova
7258 / 2605 / 744
Регистрация: 11.04.2015
Сообщений: 4,149
Записей в блоге: 43
10.10.2019, 05:30
C#
1
2
3
4
5
6
7
8
9
10
            var appdir = Path.GetDirectoryName(Environment.GetCommandLineArgs()[0]);
            var doc = new XmlDocument();
            doc.Load(Path.Combine(appdir, "files", "11.xml"));
            var nsmgr = new XmlNamespaceManager(doc.NameTable);
            nsmgr.AddNamespace("x", "urn:iso:std:iso:20022:tech:xsd:head.001.001.01");
            var frs = doc.SelectNodes("//x:Id", nsmgr);
            foreach(XmlElement fr in frs)
            {
                Console.WriteLine(fr.InnerText);
            }
0
4 / 4 / 1
Регистрация: 09.10.2019
Сообщений: 247
11.10.2019, 00:37  [ТС]
Спасибо!
Да, работает.
Неправильно поставил задачу.
Дело в том, что мне из всего этого файла выбрать всего несколько узлов по их полному имени.
Хотелось бы увидеть поиск именно по полному имени, например:

Document/BkToCstmrDbtCdtNtfctn/GrpHdr/CreDtTm

С этим проблема.
0
 Аватар для diadiavova
7258 / 2605 / 744
Регистрация: 11.04.2015
Сообщений: 4,149
Записей в блоге: 43
11.10.2019, 05:11
Цитата Сообщение от Тормоз Посмотреть сообщение
С этим проблема.
Ну какая проблема-то? Все решается также. В менеджер пространств имен добавь нужное пространство, соотнеси его с каким-нибудь префиксом, если поиск начинается от документа(не элемента Document а самого хмл-документа), то либо два слеша пере выражением, либо придется путь писать полностью, начиная корня документа или можно начинать поиск с родителя узла Document. Каждому элементу должен предшествовать префикс сопоставленный с пространством имен, к которому этот элемент относится. Ну и не забывай, что XPath, как и XML - языки регистрозависимые.
0
4 / 4 / 1
Регистрация: 09.10.2019
Сообщений: 247
11.10.2019, 07:45  [ТС]
Поменял пространство имён, мне нужна ветка Document (за оригинал твой текст):
C#
1
nsmgr.AddNamespace("x", "urn:iso:std:iso:20022:tech:xsd:camt.054.001.06");
Вместо
C#
1
var frs = doc.SelectNodes("//x:Id", nsmgr);
поставил :
C#
1
var frs = doc.SelectNodes("//x:Document", nsmgr);
попробовал, работает, и вроде как выдаёт нужный результат - всё поддерево.

Но почему не работает:
C#
1
var frs = doc.SelectNodes("//x:Document/BkToCstmrDbtCdtNtfctn", nsmgr);
в выдаче ничего нет, а если
C#
1
var frs = doc.SelectNodes("//x:BkToCstmrDbtCdtNtfctn", nsmgr);
то так же, как и с Document, и это понятно.

Попробовал
C#
1
var xn = doc.SelectSingleNode("//x:Document/BkToCstmrDbtCdtNtfctn", nsmgr);
xn получает null. Ну, это вроде как бы и должно так быть

пробовал
C#
1
var xn = doc.SelectSingleNode("//x:Document/BkToCstmrDbtCdtNtfctn/GrpHdr/MsgId", nsmgr);
и тоже null, и вот этого и не понимаю - что тут не так.
0
 Аватар для diadiavova
7258 / 2605 / 744
Регистрация: 11.04.2015
Сообщений: 4,149
Записей в блоге: 43
11.10.2019, 09:52
Цитата Сообщение от Тормоз Посмотреть сообщение
и вот этого и не понимаю - что тут не так.
Цитата Сообщение от diadiavova Посмотреть сообщение
Каждому элементу должен предшествовать префикс сопоставленный с пространством имен, к которому этот элемент относится.
В хмл декларация пространства имен действует не только в том элементе, где она объявлена, но и во всех вложенных элементах, пока не будет переопределена. То есть писать надо так //x:Document/x:BkToCstmrDbtCdtNtfctn/x:GrpHdr/x:MsgId

Добавлено через 3 минуты
И кстати, если надо взять все MsgId внутри Document, то можно и так //x:Document//x:MsgId, необязательно весь путь писать. А если это пространство используется только в этой области документа, то возможно можно сделать как я в первый раз показал. Но это так, просто к сведению.
1
4 / 4 / 1
Регистрация: 09.10.2019
Сообщений: 247
11.10.2019, 10:08  [ТС]
ВОТ!
Похоже, как раз то чего мне и не хватало!!!
Спасибо!
Сейчас ещё с аргументами разберусь(попытаюсь), и будет великолепно!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
11.10.2019, 10:08
Помогаю со студенческими работами здесь

Как прочитать xml файл из внешнего источника и на основе полученных данных сформировать HTML таблицы?
Дана задача, нужно по API получить листы с сервера, найти среди них с подтверждением(DoubleOptIn) и без(SingleOptIn). Вывести их отдельно...

XPath и работа с xml-файлом
Есть xml файл со структурой <?xml version="1.0" encoding="utf-8"?> <root> <element id=""> <localization lang="ru"...

Чем XPath лучше других методов работы с XML?
Здравствуйте. Не раз натыкался на темы, где у автора возникали проблемы с работай с XML, часто видел ответ :"Используй лучше xpath...

Что нужно писать, чтобы освоить Xml и XPath
Добрый день. В целях самообучения решил уделить внимание связке Xml, XPath. Подскажите, какое приложение (на какую тематику) можно...

Как прочитать XML?
Собственно нужно прочитать и присвоить данные переменным соответствующим названию атрибута в xml.. <TestedDocument> <People...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru