Oracle数据库中的XML解析
我使用下面的查询动态地将HTML表解析为Oracle中的XMLOracle数据库中的XML解析,oracle,Oracle,我使用下面的查询动态地将HTML表解析为Oracle中的XML SELECT ID,caption,amdtype AS Amendment_Reason FROM ( with tbl as ( SELECT ID,xmltype('<html><body>'|| REPLACE(REPLACE(REPLACE(CAST(Note AS VARCHAR(4000)),'<br>',''),'<br/>',''),'&','&
SELECT ID,caption,amdtype AS Amendment_Reason
FROM
(
with tbl as
(
SELECT ID,xmltype('<html><body>'|| REPLACE(REPLACE(REPLACE(CAST(Note AS VARCHAR(4000)),'<br>',''),'<br/>',''),'&','&') || '</body></html>') AS xml_data
FROM TBL_EVENT
WHERE EVENT_TYPE='Amended note'
AND to_Char(CREATED_DATE,'mm-yyyy') = to_char(sysdate-1,'mm-yyyy')
AND NUMBER NOT LIKE '%c%'
)
SELECT ROW_NUMBER() OVER (PARTITION BY tbl.ID ORDER BY tbl.ID) AS Rankord,tbl.ID,
x.caption,
x.amdtype
FROM tbl
CROSS JOIN
XMLTABLE(
'/html/body/table'
PASSING tbl.xml_data
COLUMNS
caption VARCHAR2(50) PATH 'caption',
amdtype VARCHAR2(50) PATH 'tr[1]/td[1]'
) x
WHERE x.caption='Amendment Reason'
)
它是为一些文本工作,但我得到下面的错误
LPX-00243:元素属性值必须用引号括起来
由于我正在动态地将其解析为XML,因此我不确定如何进行更改。请指导我如何进行更改TL;DR:修复您的数据,而不是尝试将HTML解析为格式错误的XML。在这种情况下,您需要确保将属性值完全按照错误消息中的说明用引号括起来。@MT0我是Oracle数据库的新手,请您解释一下什么是TL;博士TL;博士的意思是太长了,没读过。但在这种情况下,它指的是解释而不是问题。。。。关于如何修复SQL查询中的输入以便对其进行解析,您可以得到一个冗长而复杂的答案。然而,您将得到另一段HTML,它以不同的方式被错误地转换为XML,它将再次崩溃,您将得到另一个关于如何修复它的冗长而复杂的答案。不要走这条路。相反您需要修复输入,使其格式良好的XML数据能够被XML解析器解析,而不是试图解析几乎正确的内容。@MT0是的,您是对的,这将成为一个非常复杂的过程。当我们解决此问题时,如果有任何特殊字符而不是XML解析来获取HTML中的值,则会出现另一个错误表标记是否有其他方法读取数据以获取您的信息数据存储为CLOBWhy将数据转换为XML只是为了用XML函数查询它?为什么不共享NOTE列的内容并举例说明,并解释您试图从该列中提取什么?