powered by simpleCommunicator - 2.0.28     © 2024 Programmizd 02
Map
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / как узнать префиксы пространства имен
8 сообщений из 8, страница 1 из 1
как узнать префиксы пространства имен
    #40076280
gugolovski
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
подгружаю файл:

xlm=СоздатьОбъект("MSXML.DOMDocument");
xlm.load(файл);


загружаю коллекцию пространства имен

коллекцияNS = xlm.namespaces;

как из этой коллекции вывести префиксы простанства имен

, например "namespaceURI":

коллекцияNS.namespaceURI(n) - выдаст имя ПИ, а есть ли команда вывода префикса, аналогичная "namespaceURI"
...
Рейтинг: 0 / 0
как узнать префиксы пространства имен
    #40076318
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Никак. Префиксы - это алиасы и ни на что не влияют. Забудьте про префиксы. Есть только имя элемента и пространство имен, которому он принадлежит
...
Рейтинг: 0 / 0
как узнать префиксы пространства имен
    #40076470
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_
Никак

Ну почему же. Объявления пространств имен узла по сути задаются атрибутами. Выбирать у нужного узла атрибуты с именем, начинающимся с xmlns, если оно в точности равно xmlns, то это дефолтный неймспейс, если равно xmlns: плюс идентификатор, то префикс - то, что после двоеточия.
Хотя, конечно, смысла в этом нет, поскольку это алиасы, и ни на что не влияют.
...
Рейтинг: 0 / 0
как узнать префиксы пространства имен
    #40076482
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сон Веры Павловны
Объявления пространств имен узла по сути задаются атрибутами
Нет. Объявления пространств имен атрибутами не являются и в контейнер Attributes не попадают. Ни в DOM, ни в SAX модели
...
Рейтинг: 0 / 0
как узнать префиксы пространства имен
    #40076525
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_
Нет. Объявления пространств имен атрибутами не являются и в контейнер Attributes не попадают. Ни в DOM, ни в SAX модели

Не знаю, о каком контейнере Attributes идёт речь, но атрибутами они вполне являются. Только доступ к ним implementation-specific - некоторые парсеры вполне их считают атрибутами, и дают прямой доступ как к атрибутам - например, MSXML, как у ТС:
Код: xml
1.
2.
3.
4.
5.
6.
<styleSheet
  xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main"
  xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
  mc:Ignorable="x14ac x16r2"
  xmlns:x14ac="http://schemas.microsoft.com/office/spreadsheetml/2009/9/ac"
  xmlns:x16r2="http://schemas.microsoft.com/office/spreadsheetml/2015/02/main" />


Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
var src = new ActiveXObject("MSXML2.DomDocument");
src.async = false;
if (!src.load("D:\\Trash\\1.xml"))
{
  WScript.Echo("Error loading XML: "+src.parseError.reason+"/"+src.parseError.errorCode);
  WScript.Quit(1);
}
var attributes = src.documentElement.selectNodes("@*");
for(var i=0; i<attributes.length-1; i++)
  WScript.Echo(attributes[i].name+" "+attributes[i].value);
WScript.Echo("done");


Консольный вывод:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
D:\Trash>cscript.exe 1.js
Сервер сценариев Windows (Microsoft ®) версия 5.812
Copyright (C) Корпорация Майкрософт 1996-2006, все права защищены.

xmlns  http://schemas.openxmlformats.org/spreadsheetml/2006/main 
xmlns:mc  http://schemas.openxmlformats.org/markup-compatibility/2006 
mc:Ignorable x14ac x16r2
xmlns:x14ac  http://schemas.microsoft.com/office/spreadsheetml/2009/9/ac 
done

Или OPENXML в MSSQL:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
declare
  @x nvarchar(max)=N'<styleSheet
  xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main"
  xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
  mc:Ignorable="x14ac x16r2"
  xmlns:x14ac="http://schemas.microsoft.com/office/spreadsheetml/2009/9/ac"
  xmlns:x16r2="http://schemas.microsoft.com/office/spreadsheetml/2015/02/main" />',
  @h int;
exec sp_xml_preparedocument @h out, @x;
select * from openxml(@h, '//@*', 1)
with (
  pfx sysname '@mp:prefix',
  name sysname '@mp:localName',
  value sysname '.'
);
exec sp_xml_removedocument @h;


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
pfx      name         value
-------- ------------ ----------------------------------------------------------------
xmlns                  http://schemas.openxmlformats.org/spreadsheetml/2006/main 
xmlns    mc            http://schemas.openxmlformats.org/markup-compatibility/2006 
mc       Ignorable    x14ac x16r2
xmlns    x14ac         http://schemas.microsoft.com/office/spreadsheetml/2009/9/ac 
xmlns    x16r2         http://schemas.microsoft.com/office/spreadsheetml/2015/02/main 

(5 rows affected)

Другие парсеры такой возможности не дают, но есть вполне документированная возможность получить такие узлы через ось namespace, и результат такого XPath будет содержать именно атрибуты:
Код: c#
1.
2.
3.
4.
var xd = new XmlDocument();
xd.Load(@"D:\Trash\1.xml");
foreach (var a in xd.DocumentElement.SelectNodes("//namespace::*").Cast<XmlAttribute>())
  Console.WriteLine("{0} {1}", a.Name, a.Value);


(это дотнетовский XmlDocument)
Результат:

...
Рейтинг: 0 / 0
как узнать префиксы пространства имен
    #40076583
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сон Веры Павловны
и дают прямой доступ как к атрибутам - например, MSXML
Version depended. 3 дает доступ, 6 уже не дает.
Код: javascript
1.
var src = new ActiveXObject("MSXML2.DOMDocument.6.0");


Сон Веры Павловны
через ось namespace,
Это работает, но появляется дополнительный неймспейс
xmlns:xml http://www.w3.org/XML/1998/namespace
...
Рейтинг: 0 / 0
как узнать префиксы пространства имен
    #40094908
Баунти система на Antimania
...
Рейтинг: 0 / 0
как узнать префиксы пространства имен
    #40094909
Баунти система на Antimania
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / как узнать префиксы пространства имен
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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