oracle - Xpath 和 Oracle XMLTABLE
问题描述
我有一个包含 XML 的 CLOB。
<attrs>
<attr name="1">
<string>stringvalue</string>
</attr>
<attr name="2">
<integer>1</integer>
</attr>
<attr name="3">
<integer>2</integer>
</attr>
<attr name="4">
<boolean>false</boolean>
</attr>
</attrs>
我怎样才能只获得布尔属性和名称属性?
XMLTABLE('/attrs/attr/boolean'
PASSING XMLTYPE(CLOB)
COLUMNS ATTRIBUTENAME VARCHAR2(50) PATH '???',
ATTRIBUTEVALUE VARCHAR2(5) PATH '.'
) X
这样,我只有值,我怎样才能得到父 @name ?我可以使用 '/attrs/attr' 但我不知道如何只获取布尔值(也许我需要在之后过滤?)
谢谢!
解决方案
您可以使用以下命令在列路径中向上走回树:
'./../@name'
这样就给出了:
XMLTABLE('/attrs/attr/boolean'
PASSING XMLTYPE(CLOB)
COLUMNS ATTRIBUTENAME VARCHAR2(50) PATH './../@name',
ATTRIBUTEVALUE VARCHAR2(5) PATH '.'
) X
与您的数据一起获得:
ATTRIBUTENAME ATTRIBUTEVALUE
------------- --------------
4 false
您还可以在主 XPath 中应用子节点过滤器:
'/attrs/attr[boolean]'
然后获取该attr
节点的名称及其子boolean
节点,给出:
XMLTABLE('/attrs/attr[boolean]'
PASSING XMLTYPE(your_CLOB)
COLUMNS ATTRIBUTENAME VARCHAR2(50) PATH '@name',
ATTRIBUTEVALUE VARCHAR2(5) PATH 'boolean'
) X
得到相同的结果。
推荐阅读
- python - 如何使用 Python 3 requests 模块从加载网站中提取 HTML?
- python - 有没有办法将图像数据直接从主文件夹加载到训练和验证生成器中,而不是再次创建单独的相同文件夹?
- javascript - Nightmare.js 和 Github 操作
- xamarin - Xamarin 项目未安装
- laravel - Laravel - 如何使用规则请求创建唯一的两个字段
- c# - 具有字段值的 EF Core 结果存在于数组中
- javascript - 如何按数组中的键对对象进行分组?
- python - 随机抽样多级列
- reactjs - img 是一个 void 元素标签,不能有 `children` 也不能使用 `dangerouslySetInnerHTML`
- excel - 使用 VBA 粘贴到 Outlook 中的位图始终为空白/白色