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

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

05.06.2015, 01:03. Просмотров 1561. Ответов 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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
05.06.2015, 01:03
Ответы с готовыми решениями:

выгрузка результата запроса в формат .xml
кое-как собрал запрос, а как его выгрузить в формат .xml не знаю, помогите пжлста... //запрос...

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

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

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

5
Администратор
Эксперт .NET
13114 / 10687 / 4407
Регистрация: 17.03.2014
Сообщений: 21,512
Записей в блоге: 1
05.06.2015, 01:28 2
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  [ТС] 3
Чудеса! Спасибо большое. Только вот еще проблема появилась. В переменную name записывается "", типа пустая строка я так понимаю. Но в атрибутах ProductRevision все есть и все указано. Не подскажите с чем это связано?

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

Добавлено через 13 минут
OwenGlendower, я так понимаю, что el объявлен как элемент ProductRevision, а это ApplicationRef и его атрибуты я считываю в foreach. Только вот мне бы к атрибутам ProductRevision подобраться.
0
304 / 281 / 102
Регистрация: 06.05.2014
Сообщений: 861
05.06.2015, 10:45 4
student515,
C#
1
SelectSingleNode("//pl:ProductRevision[@id='id20']", nsmgr).Attributes["name"].Value
?
0
Администратор
Эксперт .NET
13114 / 10687 / 4407
Регистрация: 17.03.2014
Сообщений: 21,512
Записей в блоге: 1
05.06.2015, 10:50 5
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  [ТС] 6
OwenGlendower, спасибо огромное Вам, Вы меня просто спасли! Теперь хоть диплом могу начать писать
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
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; ...

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

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


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

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

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