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 は正常に機能します。私が証明できる唯一の違いは、挿入されたノードのハンドルが 2 つの例の間で異なることです。ノードハンドルで動作するのは XDOM.ELEMENT.NODE (タイプ 1) で、失敗するのは XDOM.DOC.NODE (タイプ 9) です。
ここからどこへ行くべきかわからない。コード スニペット、リンク、ポインタ。大変感謝しています