Я создаю парсер и конструктор xml, используя функции XDOM в UniVerse 10.1.0. Все идет хорошо, пока я не воспользуюсь функцией XDOMAddChild. Я могу добавить отдельные элементы с помощью дескрипторов, но при добавлении дерева я получаю сообщение об ошибке. В руководствах указано, что добавление дерева в порядке.XDOM API в UniVerse
функция XDOMAddChild
Синтаксис
XDOMAddChild (xmlHandle, xpathString, nsMap, nodeHandle, dupFlag)
Описание
Функция XDOMAddChild находит xpathString в контексте xmlHandle в DOM структуру и вставляет узел nodeHandle в качестве последнего дочернего узла найденного узла. Если , вставленный тип узла - XDOM.ATTR.NODE, этот узел вставляется как атрибут.
Параметры
Следующая таблица описывает каждый параметр синтаксиса. Параметр Описание
xmlHandle Ручка в контексте. [IN] xpathString Относительная или абсолютная строка Xpath. [IN] nsMap Карта пространств имен, которые разрешают префиксы в строке xpath. Формат «Xmlns = XMLNS умолчанию ресурса: prefix1 = prefix1_url XMLNS: prefix2 = prefix2_url»
Например: «XMLNS = http://myproject.mycompany.com Xmlns: a_prefix = a.mycompany.com» [IN]
nodeHandle Обрабатывать поддерево DOM. Если nodeHandle указывает на документ DOM, то все его дети вставлены в том же порядке. [IN]
dupFlag XDOM.DUP: Clones nodeHandle и вставляет дублирующий узел. XDOM.NODUP: Вставляет исходный узел. Поддерево также удалено с его первоначального местоположения. [IN]
Я принимаю ошибки и недостатки XDOM (в частности, с префиксами пространства имен зданий) и готовность работать с ними. Но это может быть шоу-стоппер с текущей логикой, которую я использую. Это какой-то тестовый код:
$INCLUDE UNIVERSE.INCLUDE XML.H
DATA.REQ = '<logonResponse></logonResponse>'
TEST.CHILD = '<logon>HELP</logon>'
NSMAP = ''
*
ERR$ = XDOMOpen(DATA.REQ, XML.FROM.STRING, DOM$H)
Status = XMLGetError(ERR$,errMsg)
PRINT ERR$:',':errMsg
ERR$ = XDOMOpen(TEST.CHILD, XML.FROM.STRING, CHILD$H)
Status = XMLGetError(ERR$,errMsg)
PRINT ERR$:',':errMsg
ERR$ = XDOMLocate(DOM$H,'//logonResponse',NSMAP,NOD$H)
Status = XMLGetError(ERR$,errMsg)
PRINT ERR$:',':errMsg
ERR$ = XDOMWrite(NOD$H,JUNK,XML.TO.STRING)
PRINT JUNK
ERR$ = XDOMWrite(CHILD$H,JUNK,XML.TO.STRING)
PRINT JUNK
ERR$ = XDOMAddChild(DOM$H, '',NSMAP,CHILD$H, XDOM.NODUP)
IF ERR$ = XML.SUCCESS THEN PRINT 'SUCCESS'
IF ERR$ = XML.ERROR THEN PRINT 'ERROR'
IF ERR$ = XML.INVALID.HANDLE THEN PRINT 'INVALID'
Status = XMLGetError(ERR$,errMsg)
PRINT ERR$:',':errMsg
END
Я получаю обратно ....
1004, Исключение DOM произошла в функции XDOMAddChild, DOM Код исключения: 4
Если я использую XDOMCreateNode для создания элемент TEST.CHILD, XDOMAddChild отлично работает. Единственное различие, которое я могу доказать, означает, что вставленный узел hanlde отличается между двумя примерами. Тот, который работает с дескриптором узла, - это XDOM.ELEMENT.NODE (тип 1) и тот, который не работает в XDOM.DOC.NODE (тип 9).
Не уверен, куда идти. Любые фрагменты кода, ссылки, указатели; оценивается