Имя: Пароль:
1C
 
КАк прочитать пространство имен в XML?
0 Маленький Вопросик
 
11.10.15
20:14
Например, такое

<Doc xmlns:test="http://test11.ru"; >
1 Маленький Вопросик
 
11.10.15
21:15
Чтобы в переменную получить url сайта
2 Поpyчик-4
 
11.10.15
22:43
Ну, наверное через чтение атрибутов узла. Есть принципиальная разница?
3 DrShad
 
11.10.15
23:36
Создай документ DOM и читай что хочешь
4 Маленький Вопросик
 
12.10.15
06:39
ПостроительДом = Новый ПостроительDOM();
    ДанныеDOM = ПостроительДом.Прочитать(ДанныеXML);

    Для Каждого ЭлементDOM ИЗ ДанныеDOM.ПолучитьЭлементыПоИмени("Doc") Цикл
        ЭтаФорма.Тест = ЭлементDOM.ПолучитьАтрибут("xmlns:test");
    КонецЦикла;        


к сожалению, атрибут такого типа не считывает... как быть???
5 Записьдампа
 
12.10.15
07:58
(4)
ЭлементDOM (DOMElement)
URIПространстваИмен (NamespaceURI)
Использование:

Только чтение.
Описание:

Тип: Строка; Неопределено.
URI пространства имен узла.
Свойство имеет значение Неопределено для узлов, отличных от Атрибут и Элемент, или для узлов, созданных при помощи метода DOM Level 1 (например, СоздатьЭлемент).

Доступность:

Сервер, толстый клиент, внешнее соединение, мобильное приложение(сервер).
6 Записьдампа
 
12.10.15
08:00
(1) А вот это не совсем вменямая хотелка. Пространство имен к сайту не имеет никакого отношения.
7 Адинэснег
 
12.10.15
08:43
<Doc xmlns:test="my_name_space"; >
8 Адинэснег
 
12.10.15
08:43
и уже не URL
9 Маленький Вопросик
 
12.10.15
09:36
(8) не корректно выразился, но смысл все поняли.

(5) примерчик бы - гуглю, не получается
10 DrShad
 
12.10.15
10:05
ДокументDOM (DOMDocument)
URIПространстваИмен (NamespaceURI)
Использование:

Только чтение.
Описание:

Тип: Строка; Неопределено.
URI пространства имен узла.
Свойство имеет значение Неопределено для узлов, отличных Атрибут и Элемент, или для узлов, созданных при помощи метода DOM Level 1 (например, СоздатьЭлемент).

Доступность:

Сервер, толстый клиент, внешнее соединение.
11 Записьдампа
 
12.10.15
10:30
(9)
1) Чтобы получить пространство имен нужного узла, надо взять от него свойство URIПространстваИмен, например

    Чтение = Новый ЧтениеXML;
    Чтение.УстановитьСтроку(
        "<?xml version=""1.0"" encoding=""UTF-8"" standalone=""yes""?>
        |<Doc xmlns:test=""http://test11.ru""></Doc>;
        |");
        
    ПостроительДом = Новый ПостроительDOM();
    ДанныеDOM = ПостроительДом.Прочитать(Чтение);

    Для Каждого ЭлементDOM ИЗ ДанныеDOM.ПолучитьЭлементыПоИмени("Doc") Цикл
        Сообщить(ЭлементDOM.URIПространстваИмен);
    КонецЦикла;

Внезапно выведет пустую строку. И это правильно, потому что само имя "Doc" относится к пространству имен
по умолчанию (которое определяется выше и которое здесь пусто). Если изменить пример и указать, что
имя "Doc"" относится к декларируемому пространству:

    Чтение.УстановитьСтроку(
        "<?xml version=""1.0"" encoding=""UTF-8"" standalone=""yes""?>
        |<test:Doc xmlns:test=""http://test11.ru""></test:Doc>;
        |");
    ...
    
То получим ожидаемое.

Ну или аналогично, сразу через ЧтениеXML

    Чтение = Новый ЧтениеXML;
    Чтение.УстановитьСтроку(
        "<?xml version=""1.0"" encoding=""UTF-8"" standalone=""yes""?>
        |<test:Doc xmlns:test=""http://test11.ru""></test:Doc>;
        |");
    Чтение.ПерейтиКСодержимому();
    
    Сообщить("Пространство = " + Чтение.URIПространстваИмен);

2) Чтобы получить все текущие пространства имен достаточно получить массив имен у свойства чтения
"КонтекстПространствИмен" вызовом URIПространствИмен(). Например так:

    Чтение = Новый ЧтениеXML;
    Чтение.УстановитьСтроку(
        "<?xml version=""1.0"" encoding=""UTF-8"" standalone=""yes""?>
        |<test:Doc xmlns:test=""http://test11.ru""></test:Doc>;
        |");
    Чтение.ПерейтиКСодержимому();
    
    Для Каждого Имя Из Чтение.КонтекстПространствИмен.URIПространствИмен() Цикл
        Сообщить("Пространство = " + Имя);
    КонецЦикла;
    
Здесь уже нет разницы - на каком уровне и для чего было определено пространство - для документа или для вложенных элементов.
Аналогичный результат будет и при

    Чтение.УстановитьСтроку(
        "<?xml version=""1.0"" encoding=""UTF-8"" standalone=""yes""?>
        |<Doc xmlns:test=""http://test11.ru""></Doc>;
        |");

И при

    Чтение.УстановитьСтроку(
        "<?xml version=""1.0"" encoding=""UTF-8"" standalone=""yes""?>
        |<test:Doc xmlns:test=""http://test11.ru""></test:Doc>;
        |");
Закон Брукера: Даже маленькая практика стоит большой теории.