如何从 Oracle XMLTYPE 中提取叶节点
我只想从 Oracle 10g 中的 XMLTYPE 对象中提取叶节点
SELECT
t.getStringVal() AS text
FROM
TABLE( XMLSequence(
XMLTYPE(
'<xml>
<node>
<one>text</one>
</node>
<node>
<two>text</two>
</node>
<node>
<three>text</three>
</node>
</xml>'
).extract( '//*' )
) ) t
我应该使用什么作为 WHERE 子句,以便只返回这些:
<one>text</one>
<two>text</two>
<three>text</three>
我已经尝试了以下方法,但它们不起作用:
WHERE t.existsNode( '//*' ) = 0
WHERE t.existsNode( '/.//*' ) = 0
WHERE t.existsNode( './/*' ) = 0
我缺少什么?
I want to extract only the leaf nodes from an XMLTYPE object in Oracle 10g
SELECT
t.getStringVal() AS text
FROM
TABLE( XMLSequence(
XMLTYPE(
'<xml>
<node>
<one>text</one>
</node>
<node>
<two>text</two>
</node>
<node>
<three>text</three>
</node>
</xml>'
).extract( '//*' )
) ) t
What should I use as the WHERE clause so this returns only these:
<one>text</one>
<two>text</two>
<three>text</three>
I've tried the following but they don't work:
WHERE t.existsNode( '//*' ) = 0
WHERE t.existsNode( '/.//*' ) = 0
WHERE t.existsNode( './/*' ) = 0
What am I missing?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
没关系,我找到了:
Nevermind, I found it:
XPath
//*[not(*)]
将获取级别 1 或更深级别的任何没有任何子元素的元素:SQL Fiddle
查询 1:
结果:
如果您希望能够包含根元素,则使用 XPath
(//*|/*)[not( *)]
The XPath
//*[not(*)]
will get any element at level 1 or deeper that does not have any children:SQL Fiddle
Query 1:
Results:
If you want to be able to include the root element then use the XPath
(//*|/*)[not(*)]
您可以尝试以下 PL/SQL:
You can try the following PL/SQL: