Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/11: Рейтинг темы: голосов - 11, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 05.06.2015
Сообщений: 3

Нет результата запроса к XML (XPath)

05.06.2015, 01:03. Показов 2415. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Не могу найти ошибку. Нужно из файла xml вытащить к примеру значение атрибута name узла ProductRevision.
XML файл большой, поэтому кину только начало, где есть нужные элементы.
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?xml version="1.0" encoding="utf-8"?>
<!-- GENERATED BY: PLM XML SDK 7.0.3.285 -->
<PLMXML xmlns="http://www.plmxml.org/Schemas/PLMXMLSchema"
 schemaVersion="6" language="ru-ru" date="2015-05-15" languages="ru-ru en-us" time="12:12:49" author="Teamcenter V10000.1.0.20130604.00 - ППППР@IMC--2016970017(-2016970017)">
<Header id="id1" traverseRootRefs="#id6" transferContext="ConfiguredDataExportDefault"></Header>
<ProductRevision id="id20" name="Коробка выводов" accessRefs="#id10" subType="SPB5_AssyRevision" masterRef="#id22" revision="00">
<ApplicationRef version="xQUVV1Uh4x3p9D" application="Teamcenter" label="xMeVV1Uh4x3p9D"></ApplicationRef>
<UserData id="id21">
<UserValue value="2015-05-15T11:59:41" title="last_mod_date"></UserValue>
<UserValue value="АГБВ.686285.129/00-Коробка выводов" title="object_string"></UserValue></UserData></ProductRevision>
<ProductRevision id="id36" name="Крышка подшипника" accessRefs="#id10" subType="SPB5_DetRevision" masterRef="#id38" revision="00">
<ApplicationRef version="w_RVV1Uh4x3p9D" application="Teamcenter" label="w6bVV1Uh4x3p9D"></ApplicationRef>
<UserData id="id37">
<UserValue value="2015-05-15T11:21:41" title="last_mod_date"></UserValue>
<UserValue value="АГБВ.688283.128/00-Крышка подшипника" title="object_string"></UserValue></UserData></ProductRevision>
Пытаюсь сделать это с помощью следующего кода, но значение ProductRevision null.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
 private void button3_Click(object sender, EventArgs e)
        {
            XmlDocument doc = new XmlDocument();
            doc.Load("АГБВ.685910.321_00-Электродвигатель асинхронный.xml");
            XmlNode root = doc.DocumentElement;
 
            XmlNode ProductRevision = root.SelectSingleNode("//ProductRevision[@id='id20']");
            foreach (XmlNode n in ProductRevision)
            {
                string znach[1] = n.Attributes["name"].Value;
                MessageBox.Show("ok");
            }
        }
Пробую просто загрузить узлы ProductRevision с помощью следующего кода
C#
1
2
3
4
5
6
7
8
 private void button3_Click(object sender, EventArgs e)
        {
            XmlDocument doc = new XmlDocument();
            doc.Load("АГБВ.685910.321_00-Электродвигатель асинхронный.xml");
            XmlNode root = doc.DocumentElement;
 
            XmlNodeList ProductRevision = root.SelectNodes("//ProductRevision");
        }
Теперь значение ProductRevision не null, но никакого списка тоже нет. "Представление результатов -Empty (Перечисление не дало результатов)". И что это значит я не понимаю.

Единственное что мне удалось - это в переменную root загрузить список всех узлов со всеми атрибутами, а что-то конкретное выудить из файла не удается.
Помогите пожалуйста найти ошибку. Может я совершенно не так все делаю?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
05.06.2015, 01:03
Ответы с готовыми решениями:

выгрузка результата запроса в формат .xml
кое-как собрал запрос, а как его выгрузить в формат .xml не знаю, помогите пжлста... //запрос Процедура Сформировать() Перем Запрос,...

LINQ to XML или XPath to XML (выбор одного элемента)
Прошу помощи в LINQ или XPath запросе к XML Вот XML: &lt;manifest...

Выгрузка в XML файл результатов запроса. Создание xml схемы с имеющегося xml файла
Доброго времени суток. Имеется необходимый для загрузки пример XML файла и из него необходимо построить XML схему для выгрузки данных...

5
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18286 / 14209 / 5368
Регистрация: 17.03.2014
Сообщений: 28,888
Записей в блоге: 1
05.06.2015, 01:28
student515, в документе используется пространство имен (xmlns="http://www.plmxml.org/Schemas/PLMXMLSchema"). XPath запрос //ProductRevision означает элемент не принадлежащий никакому пространству имен, а таких элементов в данном документе нет. Поэтому поиск ничего не возвращает. Код следует немного изменить:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
private void button3_Click(object sender, EventArgs e)
{
    XmlDocument doc = new XmlDocument();
    doc.Load("АГБВ.685910.321_00-Электродвигатель асинхронный.xml");
 
    var nsmgr = new XmlNamespaceManager(doc.NameTable);
    // Назначаем псевдоним пространству имен
    nsmgr.AddNamespace("pl", "http://www.plmxml.org/Schemas/PLMXMLSchema");
    
    // Выбираем элемент в нужном пространстве имен используя ранее выбранный псевдоним
    XmlNode ProductRevision = doc.SelectSingleNode("//pl:ProductRevision[@id='id20']", nsmgr);
    foreach (XmlElement el in ProductRevision)
    {
        string name = el.GetAttribute("name");
        MessageBox.Show("ok");
    }
}
1
0 / 0 / 0
Регистрация: 05.06.2015
Сообщений: 3
05.06.2015, 10:41  [ТС]
Чудеса! Спасибо большое. Только вот еще проблема появилась. В переменную name записывается "", типа пустая строка я так понимаю. Но в атрибутах ProductRevision все есть и все указано. Не подскажите с чем это связано?

Добавлено через 25 минут
OwenGlendower, а el - "Перечисление не дало результатов". Может переменная el не как элемент должна быть?

Добавлено через 13 минут
OwenGlendower, я так понимаю, что el объявлен как элемент ProductRevision, а это ApplicationRef и его атрибуты я считываю в foreach. Только вот мне бы к атрибутам ProductRevision подобраться.
0
307 / 284 / 102
Регистрация: 06.05.2014
Сообщений: 861
05.06.2015, 10:45
student515,
C#
1
SelectSingleNode("//pl:ProductRevision[@id='id20']", nsmgr).Attributes["name"].Value
?
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18286 / 14209 / 5368
Регистрация: 17.03.2014
Сообщений: 28,888
Записей в блоге: 1
05.06.2015, 10:50
student515, в коде еще одна ошибка которую я вчера проглядел. Метод SelectSingleNode возвращает узел, а не коллекцию. Поэтому цикл foreach не нужен. Исправленный код:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
private void button3_Click(object sender, EventArgs e)
{
    XmlDocument doc = new XmlDocument();
    doc.Load("АГБВ.685910.321_00-Электродвигатель асинхронный.xml");
 
    var nsmgr = new XmlNamespaceManager(doc.NameTable);
    // Назначаем псевдоним пространству имен
    nsmgr.AddNamespace("pl", "http://www.plmxml.org/Schemas/PLMXMLSchema");
    
    // Выбираем элемент в нужном пространстве имен используя ранее выбранный псевдоним
    XmlElement productRevision = (XmlElement)doc.SelectSingleNode("//pl:ProductRevision[@id='id20']", nsmgr);
    if (productRevision != null)
    {
        string name = productRevision.GetAttribute("name");
        MessageBox.Show("ok");
    }
}
1
0 / 0 / 0
Регистрация: 05.06.2015
Сообщений: 3
05.06.2015, 11:02  [ТС]
OwenGlendower, спасибо огромное Вам, Вы меня просто спасли! Теперь хоть диплом могу начать писать
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
05.06.2015, 11:02
Помогаю со студенческими работами здесь

Как результат запроса другого результата запроса запихнуть в массив?
Как результат запроса другого результата запроса запихнуть в массив? Здравствуйте, у меня такая вот небольшая головоломка, у меня есть...

Прочитать Xml файл, XPath
Доброго времени суток! Пытаюсь на C# просмотреть(прочитать, распарсить, как угодно называйте, не придирайтесь, терминологией в...

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

Парсинг файла xml с Xpath
Необходимо вывести в консоли из файла xml fullName, INN, KPP из узла customerInfo. &lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;...

Не работает XPath при анализе XML
Пишу программу, которая должна заменять в docx-документе выбранное слово другим. Разобрался с тем, что docx -формат - это архив xml, нашел...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет значение производной при заданном х Логарифм записывается как: (x-2)log(x^2+2) -. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru