在R中提取XML sqlQuery,轻松提取CLOB列中的所有变量

问题描述

我有一个名为CRS.CRS_FILES的oracle数据库表,其中有一个名为FILE_DATA的列-其中CLOB列是一个大型XML字符串。

supply_conversion_chart

以下是模式的前几行:

FILE_DATA   FILE_CREATION_DATE
<?xml version="1.0" encoding="utf-8"?><REPORT   1/1/2020
<?xml version="1.0" encoding="utf-8"?><REPORT   1/5/2020
<?xml version="1.0" encoding="utf-8"?><REPORT   1/6/2019
<?xml version="1.0" encoding="utf-8"?><REPORT   1/1/2020
<?xml version="1.0" encoding="utf-8"?><REPORT   1/5/2020

我可以使用以下命令在R中进行查询:

CREATE TABLE CRS.CRS_FILES ( FILE_DATA CLOB );

INSERT INTO CRS.crs_files VALUES (
'<?xml version="1.0" encoding="utf-8" ?>
<REPORT xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.datacontract.org/2004/07/CrashReport.DataLayer.v20170201">
  <CRSREPORTTIMESTAMP>2020-10-08T06:49:31.813812</CRSREPORTTIMESTAMP>-
  <AGENCYIDENTIFIER>MILWAUKEE</AGENCYIDENTIFIER>-
  <AGENCYNAME>Milwaukee Police Department</AGENCYNAME>
</REPORT>'
)

输出:

query_string2 <- "SELECT x.agencyname
FROM   CRS.CRS_FILES c
       CROSS JOIN XMLTABLE(
         XMLNAMESPACES(
           'http://www.w3.org/2001/XMLSchema-instance' AS \"i\",DEFAULT 'http://schemas.datacontract.org/2004/07/CrashReport.DataLayer.v20170201'
         ),'/REPORT'
         PASSING XMLTYPE( c.file_data )
         COLUMNS
           crsreporttimestamp TIMESTAMP     PATH 'CRSREPORTTIMESTAMP',agencyidentifier   VARCHAR2(50)  PATH 'AGENCYIDENTIFIER',agencyname         VARCHAR2(100) PATH 'AGENCYNAME'
       ) x"

idtable <- sqlQuery(ch,query_string2,max=10)

我需要什么:

没有指定每个变量和路径(所有变量都在REPORT的节点/子注释中,但是有数百个)。如何构造这样的查询,这样就不必列出所有变量(例如我如何通过上面传递的XMLtype在查询中添加| AGENCYNAME | | :-------------------------- | | Milwaukee Police Department | agencyidentifier)。这种方法必须可行(在R中查询)。谢谢。

仅提供上下文,这是一些我需要添加的子节点示例,它显示了有多少个不同的组

agencyname

如果您想尝试一些操作,这里是另一位用户创建的小提琴:

   report_no VARCHAR(35)     PATH '/VEHICLEs/CRSVEHICLE/PASSENGERs/PASSENGER/PERSON/REPORTNUMBER',person_id VARCHAR(50)     PATH '/VEHICLEs/CRSVEHICLE/PASSENGERs/PASSENGER/PERSON/PERSONID',vehicle_id VARCHAR(50)     PATH '/VEHICLEs/CRSVEHICLE/PASSENGERs/PASSENGER/VEHICLEID'

https://dbfiddle.uk/?rdbms=oracle_18&fiddle=abfa4cbbea535f22415a851cb625045e

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...