0

これは愚かな XPATH の質問です。コードは PL/SQL ですが、問題にはなりません。

lx_a := XMLTYPE('<rfs-graph><graphml>foo</graphml><rfs-graph>');
lx_b := lx_a.extract('/rfs-graph/graphml[1]');
dbms_output.put_line(lx_b.getStringVal());

実行すると、結果は

<graphml>foo</graphml>

しかし、このコードを実行すると:

lx_a := XMLTYPE('<rfs-graph><graphml xmlns="abc">foo</graphml></rfs-graph>');
lx_b := lx_a.extract('/rfs-graph/graphml[1]');
dbms_output.put_line(lx_b.getStringVal());

lx_b が null であるため失敗します。

唯一の違いは、graphml 要素に属性があることです。

属性があるかどうかに関係なく、graphml 要素を選択するにはどうすればよいですか?

4

2 に答える 2

2

xmlns="abc"は標準属性ではなく、名前空間プレフィックス宣言です。この場合、接頭辞が省略されているため、実際にはそのノード (およびすべての子ノード) のデフォルトの名前空間を指定しています。

2 番目のケースで XPath が一致しない理由は、ノードの名前が単にgraphml、そのabc:graphml、つまり名前空間にあるためabcです。XPath は次のようになります。

/rfs-graph/a:graphml[1]

プレフィックスが名前空間にaマップされている場合、 PL/SQLでこれを行う方法は次のとおりだと思いますabc

lx_b := lx_a.extract('/rfs-graph/a:graphml[1]', 'xmlns:a="abc"');

しかし、今までPL/SQLを1行も書いたことがないので、よくわかりません。

于 2013-10-01T13:13:02.890 に答える