XML - статьи

Специфицирование пространства имен


Если сохраненный XML-документ имеет пространства имен (namespaces), то все XML-запросы к этому документу должны быть определены для пространства имен, так как <Namespace:Element> - это не одно и то же что <Element> в XML. Обе функции XMLType.existNode() и XMLType.extract() разрешают пользователю специфицировать пространство имен во втором параметре, как показано ниже: MEMBER FUNCTION existsNode(xpath in varchar2, nsmap in varchar2) RETURN number deterministic MEMBER FUNCTION extract(xpath IN varchar2, nsmap IN varchar2) RETURN XMLType deterministic

В этом случае Xpath требует использования полностью квалифицированных (qualified) XML имен, которые содержат имя элемента и его пространство имен. Например, вы можете вставить XML-документ с двумя декларированными пространствами имен в XMLTypes, как показано ниже: CREATE TABLE temp (doc XMLType); DECLARE v_temp XMLType; BEGIN v_temp:= XMLType.createXML('<foo xmlns="http://www.example.com" xmlns:xsd="http://www.w3c.org/2001/XMLSchema"> <foo_type xsd:type="date">03-11-1998</foo_type> </foo>'); INSERT INTO temp VALUES(v_temp); END;

Чтобы запросить этот документ, вы можете определить пространство имен и его префикс во втором параметре функции XMLType.extract() и квалифицировать XPath, используя префикс, как показано в следующем SQL-запросе: SELECT a.doc.extract('/a:foo/a:foo_type', 'xmlns:a="http://www.example.com"') FROM temp a;

Результатом будет: <foo_type xmlns="http://www.example.com" xmlns:xsd="http://www.w3c.org/2001/ XMLSchema" xsd:type="date">03-11-1998</foo_type>



Содержание раздела