powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Проблема в xmlns, не могу обратиться к нужной ветке
12 сообщений из 12, страница 1 из 1
Проблема в xmlns, не могу обратиться к нужной ветке
    #37044606
f50
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте господа программисты! С прошедшим празником НГ!
Вопрос возник, наверное не сложный для тех кто с этим работает каждый день, я же столкнулся впервые....
Попалась XML, её надо разобрать (Delphi+TXMLDocument). Всё бы хорошо, если бы не было xmlns...

Т.е. к этому примеру никак достучаться не могу до значений "X":

Листинг1:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
<?xml version="1.0" encoding="UTF-8"?>
<main:Envelope xmlns:main="http://www.qqq.org" xmlns="http://www.eee.org">
 <main:txt>
  <val x="1"/>
  <val x="2"/>
  <val x="3"/>
 </main:txt>
</main:Envelope>

А вот такой пример на ура работает:
Листинг2:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
<?xml version="1.0" encoding="UTF-8"?>
<main>
 <txt>
  <val x="1"/>
  <val x="2"/>
  <val x="3"/>
 </txt>
</main>
"Стучусь" до него так:
Код: plaintext
s:=VarToStr(x.DocumentElement.ChildNodes['txt'].ChildNodes['val'].Attributes['x']);

Вопрос, как "достучаться" до значений в первом примере? Про xmlns читал... всё равно не соображу как обращатся.

Нюанс, если код переделать так:
Листинг3:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
<?xml version="1.0" encoding="UTF-8"?>
<main:Envelope xmlns:main="http://www.qqq.org" xmlns="http://www.eee.org">
 <main:txt>
  <main:val x="1"/>
  <main:val x="2"/>
  <main:val x="3"/>
 </main:txt>
</main:Envelope>

То считываю тоже без проблем:
Код: plaintext
s:=VarToStr(x.DocumentElement.ChildNodes['main:txt'].ChildNodes['main:val'].Attributes['x']);

Но XML именно как в листинге 1.
...
Рейтинг: 0 / 0
Проблема в xmlns, не могу обратиться к нужной ветке
    #37044660
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Проблема в xmlns, не могу обратиться к нужной ветке
    #37044981
f50
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_ спасибо, такой пример видел, сделал XML + JSE, алерт работает нормально и показывает что есть что. Тут с пространствами всё понятно.
Но в моём случае, в Delphi, для листрига 1, не подходит не один код:
Код: plaintext
1.
2.
3.
4.
s:=VarToStr(x.DocumentElement.ChildNodes['main:txt'].ChildNodes['main:val'].Attributes['x']);
s:=VarToStr(x.DocumentElement.ChildNodes['txt'].ChildNodes['val'].Attributes['x']);
s:=VarToStr(x.DocumentElement.ChildNodes['main:txt'].ChildNodes['val'].Attributes['x']);
s:=VarToStr(x.DocumentElement.ChildNodes['txt'].ChildNodes['main:val'].Attributes['x']);
ствлю символы типа "//" как в JS, так ошибку выдаёт:
Это имя не должно содержать знак ":"
хотя там знака ":" и в помине нет.
Как оформить запись в моём случае, чтоб достучаться до атрибутов X в листинге 1
...
Рейтинг: 0 / 0
Проблема в xmlns, не могу обратиться к нужной ветке
    #37045014
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И в JS и в Delphi используются одни и те же объекты MSXML. Перенесите код один в один и будет Вам счастье
...
Рейтинг: 0 / 0
Проблема в xmlns, не могу обратиться к нужной ветке
    #37045019
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
f50 не подходит не один код:Ну и где здесь вызов setProperty?
...
Рейтинг: 0 / 0
Проблема в xmlns, не могу обратиться к нужной ветке
    #37045020
f50
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в примере по ссылке тоже разбираю XML без проблем, т.к. там секция branch не входит внутрь суфиксов. Но если стоит поместить внутрь др. секции, она просто не видна...

Пример там:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
<?xml version="1.0"?> 
<root> 
	<branch>branch</branch> 
	<a:root xmlns:a="http://myserver.com"> 
	<a:branch>a-branch</a:branch> 
	<b:branch xmlns:b="http://yourserver.com">b-branch</b:branch> 
	</a:root> 
</root>

Пример мой на их манер:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
<?xml version="1.0"?> 
<root> 
	<a:root xmlns:a="http://myserver.com"> 
	<a:branch>
		<branch>!!! branch SOS Как сюда попасть !!!</branch> 
	</a:branch> 
	<b:branch xmlns:b="http://yourserver.com">b-branch</b:branch> 
	</a:root> 
</root>
...
Рейтинг: 0 / 0
Проблема в xmlns, не могу обратиться к нужной ветке
    #37045026
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
/root/a:root/a:branch/branch
...
Рейтинг: 0 / 0
Проблема в xmlns, не могу обратиться к нужной ветке
    #37045030
f50
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в том и дело, символ / не даёт вписать
...
Рейтинг: 0 / 0
Проблема в xmlns, не могу обратиться к нужной ветке
    #37045137
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
selectSingleNode()
...
Рейтинг: 0 / 0
Проблема в xmlns, не могу обратиться к нужной ветке
    #37045176
f50
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Delphi+ TXMLDocument к сожалению юзаю, там нет этого.
...
Рейтинг: 0 / 0
Проблема в xmlns, не могу обратиться к нужной ветке
    #37045250
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TXMLDocument всего лишь обертка над IXMLDOMDocument
...
Рейтинг: 0 / 0
Проблема в xmlns, не могу обратиться к нужной ветке
    #37045584
f50
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_ , спасибо, буду пробовать.
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Проблема в xmlns, не могу обратиться к нужной ветке
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]