Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/15: Рейтинг темы: голосов - 15, средняя оценка - 4.80
-5 / 1 / 1
Регистрация: 10.11.2011
Сообщений: 24

NULL при получении значения атрибута узла XML

25.11.2011, 12:59. Показов 3028. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте!
Код программы:
C++
1
2
_di_IXMLNode A_Number_PP = SubParcel_node->AttributeNodes->FindNode( L"Number_PP" );
AnsiString Val_Number_PP = A_Number_PP->NodeValue;
Код XML:
XML
1
<SubParcel Number_PP="" Full="0" DateCreated="2006-11-14">
Ошибка:
Невозможно преобразовать переменную типа NULL в переменную типа String.

Как решить эту проблему?
У меня был вариант написать что-то вроде:
C++
1
2
3
4
5
6
if(A_Number_PP->NodeValue==NULL){
                Val_Number_PP = "";
        }
       else{
                Val_Number_PP = A_Number_PP->NodeValue;
        }
Но этот код не работает, программа не заходи в if и выдает ту же ошибку.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
25.11.2011, 12:59
Ответы с готовыми решениями:

Копирование определенного узла из одного XML в другой XML
Подскажите пожалуйста как скопировать узел из одного XML в другой XML в C++ Builder 6 &lt;?xml version=&quot;1.0&quot;...

Ошибка при получении атрибута значения контекста (Номенклатура)
Процедура УдалениеСтрокНажатие(Элемент) Запрос = Новый Запрос; ...

После перехода с 8.1 на 8.2 выдает: Ошибка при получении значения атрибута контекста (Результат)
{Отчет.РасчетныеЛисткиОрганизаций(691)}: Ошибка при получении значения атрибута контекста (Результат) ТаблицаРезультатаЗапроса =...

6
1090 / 588 / 121
Регистрация: 11.11.2008
Сообщений: 1,544
25.11.2011, 13:21
C++
1
if(!A_Number_PP->NodeValue.IsNull())
1
 Аватар для Maluda
1280 / 598 / 116
Регистрация: 18.08.2009
Сообщений: 832
25.11.2011, 13:30
Прежде, чем парсить XML, надо хотя бы прочитать, что это такое,
какова его структура.
Допустим, тебе надо распарсить все составляющие этого узла.

XML
1
<SubParcel Number_PP="" Full="0" DateCreated="2006-11-14">
SubParcel - это НАЗВАНИЕ УЗЛА
Number_PP - это НАЗВАНИЕ АТТРИБУТА
то, что в кавычках после названия аттрибута - это ЗНАЧЕНИЕ АТТРИБУТА

_di_IXMLNode ANode - предположим, что это указатель на весь этот узел.

C++
1
2
3
4
const AnsiString sNodeName = ANode->NodeName; // результат "SubParcel"
const AnsiString sAttrNumber = ANode->GetAttribute("Number_PP"); // результат ""
const AnsiString sAttrFull = ANode->GetAttribute("Full"); // результат "0"
const AnsiString sAttrData = ANode->GetAttribute("DateCreated"); // результат "2006-11-14"
1
-5 / 1 / 1
Регистрация: 10.11.2011
Сообщений: 24
25.11.2011, 14:47  [ТС]
Цитата Сообщение от Maluda Посмотреть сообщение
Прежде, чем парсить XML, надо хотя бы прочитать, что это такое,
какова его структура.
У меня есть файл с описанием структуры Xml.
Если делать FindNode, потом if(имя узла) как я делаю - это не правильно?
Это ведь тоже разбор структуры?
C++
1
2
3
4
_di_IXMLNode Areas_node = SubParcel_node->ChildNodes->FindNode( L"Areas" );
if(Areas_node){
...
}
Или лучше "прочитать, что это такое" :
C++
1
2
3
4
const AnsiString sNodeName = ANode->NodeName; // результат "SubParcel"
const AnsiString sAttrNumber = ANode->GetAttribute("Number_PP"); // результат ""
const AnsiString sAttrFull = ANode->GetAttribute("Full"); // результат "0"
const AnsiString sAttrData = ANode->GetAttribute("DateCreated"); // результат "2006-11-14"
?

Добавлено через 1 минуту
Цитата Сообщение от AntonChik Посмотреть сообщение
C++
1
if(!A_Number_PP->NodeValue.IsNull())
Работает, без ! перед A_Number_PP.

Добавлено через 10 минут
Наверное ты прав, так лучше, но это значит, что мне придётся много переделывать.
0
-5 / 1 / 1
Регистрация: 10.11.2011
Сообщений: 24
28.11.2011, 07:58  [ТС]
Цитата Сообщение от Maluda Посмотреть сообщение
Прежде, чем парсить XML, надо хотя бы прочитать, что это такое,
какова его структура.
Допустим, тебе надо распарсить все составляющие этого узла.

XML
1
<SubParcel Number_PP="" Full="0" DateCreated="2006-11-14">
SubParcel - это НАЗВАНИЕ УЗЛА
Number_PP - это НАЗВАНИЕ АТТРИБУТА
то, что в кавычках после названия аттрибута - это ЗНАЧЕНИЕ АТТРИБУТА

_di_IXMLNode ANode - предположим, что это указатель на весь этот узел.

C++
1
2
3
4
const AnsiString sNodeName = ANode->NodeName; // результат "SubParcel"
const AnsiString sAttrNumber = ANode->GetAttribute("Number_PP"); // результат ""
const AnsiString sAttrFull = ANode->GetAttribute("Full"); // результат "0"
const AnsiString sAttrData = ANode->GetAttribute("DateCreated"); // результат "2006-11-14"
А есть что-то подобное для дочерних узлов, например, если AreaCode будет пуст.
XML
1
2
3
4
5
<Area>
  <AreaCode>002</AreaCode> 
  <Area>10475</Area> 
  <Unit>055</Unit> 
  </Area>
Попробовала по подобию использовать GetNodeValue, ошибка, если дочерний узел пуст. С NodeValue тоже самое.
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
28.11.2011, 08:08
GetText не пробовали ?
1
-5 / 1 / 1
Регистрация: 10.11.2011
Сообщений: 24
28.11.2011, 08:15  [ТС]
Цитата Сообщение от LK Посмотреть сообщение
GetText не пробовали ?
Да, с GetText() работает.
Спасибо.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
28.11.2011, 08:15
Помогаю со студенческими работами здесь

Как получить значение атрибута заданного узла в xml документе
Добрый день, всю голову сломал, второй день не могу найти как сделать подобное. Есть xml. В ней надо найти узел с атрибутом...

Доступ к узлу XML файла по значению атрибута. Получения индекса узла по значению
Есть XML файл следующего содержания: &lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt; &lt;resources&gt; &lt;string...

В чем разница между @,=,& при получении значений атрибута в directive ? Angular
Вот простой рабочий пример получения значение атрибутов с элемента &lt;div ng-controller=&quot;MyController&quot;&gt; &lt;div...

Php, работа с xml. замена значения узла
всем привет). вот у меня есть xml-файл. я хочу изменить значение узла &lt;moloko&gt;. как это можно сделать?? пожалуйста, напишите пример. ...

LINQ to XML: Получить значения всех аттрибутов узла
Друзья, всем привет. Кто нибудь может подсказать как написать правильно запрос, используя xml linq, для того, чтобы достать все значения...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Первый деплой
lagorue 16.01.2026
Не спеша развернул своё 1ое приложение в kubernetes. А дальше мне интересно создать 1фронтэнд приложения и 2 бэкэнд приложения развернуть 2 деплоя в кубере получится 2 сервиса и что-бы они. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит токи на L и напряжения на C в установ. режимах до и. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
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