我正在使用 UniVerse 10.1.0 中的 XDOM 函数构建一个 xml 解析器和构造函数。在我开始使用 XDOMAddChild 函数之前,一切都很顺利。我可以使用句柄很好地添加单个元素,但添加树时出现错误。手册表明添加树很好。
XDOMAddChild 函数
句法
XDOMAddChild(xmlHandle, xpathString, nsMap, nodeHandle, dupFlag)
描述
XDOMAddChild 函数在 DOM 结构中的上下文 xmlHandle 中找到 xpathString,并插入一个节点 nodeHandle 作为找到的节点的最后一个子节点。如果插入的节点类型是 XDOM.ATTR.NODE,则该节点作为属性插入。
参数
下表描述了语法的每个参数。参数说明
xmlHandle 上下文句柄。[IN] xpathString 相对或绝对 Xpath 字符串。[IN] nsMap 解析 xpath 字符串中前缀的命名空间映射。格式为“xmlns=default_url xmlns:prefix1=prefix1_url xmlns:prefix2=prefix2_url”</p>
例如:“xmlns= http://myproject.mycompany.com xmlns:a_prefix=a.mycompany.com” [IN]
nodeHandle DOM 子树的句柄。如果 nodeHandle 指向一个 DOM 文档,它的所有子节点都以相同的顺序插入。[在]
dupFlag XDOM.DUP:克隆 nodeHandle,并插入重复的节点。XDOM.NODUP:插入原始节点。子树也从其原始位置移除。[在]
我接受 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,函数XDOMAddChild发生DOM异常,DOM异常代码:4
如果我使用 XDOMCreateNode 创建 TEST.CHILD 元素,则 XDOMAddChild 工作正常。我可以证明的唯一区别是插入的节点 hanlde 在 2 个示例之间是不同的。使用节点句柄的一种是 XDOM.ELEMENT.NODE(类型 1),而在 XDOM.DOC.NODE(类型 9)中失败的一种。
不知道从这里去哪里。任何代码片段、链接、指针;非常感激