将 clob 转换为 xml 解析错误
Posted
技术标签:
【中文标题】将 clob 转换为 xml 解析错误【英文标题】:Converting clob to xml parse error 【发布时间】:2018-06-15 09:57:25 【问题描述】:我正在尝试将 clob 转换为 xml。我收到以下错误:
ORA-31011: XML 解析失败 ORA-19202: XML 处理中发生错误 LPX-00601:无效令牌在:'/KrediBilgi/'
程序:
procedure parse_xml(response in CLOB) is
l_xmlType XMLTYPE;
begin
l_xmlType := XMLTYPE.CreateXML(response);
FOR r IN (
SELECT ExtractValue(Value(p),'/KrediBilgi/Durum/text()') as durum
,ExtractValue(Value(p),'/KrediBilgi/GuncelRisk/text()') as risk
,ExtractValue(Value(p),'/KrediBilgi/GuncelRiskTarih/text()') as tarih
,ExtractValue(Value(p),'/KrediBilgi/KrediHesapNo/text()') as hesapNo
,ExtractValue(Value(p),'/KrediBilgi/KrediKod/text()') as krediKod
,ExtractValue(Value(p),'/KrediBilgi/KrediKonu/text()') as krediKonu
,ExtractValue(Value(p),'/KrediBilgi/KrediTur/text()') as krediTur
,ExtractValue(Value(p),'/KrediBilgi/KrediTutar/text()') as krediTutar
,ExtractValue(Value(p),'/KrediBilgi/PbKod/text()') as pbKod
,ExtractValue(Value(p),'/KrediBilgi/ProjeKod/text()') as projeKod
FROM TABLE(XMLSequence(Extract(l_xmlType,'/KrediBilgi/'))) p
) LOOP
dbms_output.put_line(r.durum);
dbms_output.put_line(r.risk);
dbms_output.put_line(r.tarih);
dbms_output.put_line(r.hesapNo);
dbms_output.put_line(r.krediKod);
dbms_output.put_line(r.krediKonu);
dbms_output.put_line(r.krediTur);
dbms_output.put_line(r.krediTutar);
dbms_output.put_line(r.pbKod);
dbms_output.put_line(r.projeKod);
END LOOP;
end parse_xml;
【问题讨论】:
你能把你传递给proc的response
也发给你吗?
【参考方案1】:
如果你的xml结构:
<KrediBilgi>
<Durum>text1</Durum>
<GuncelRisk>text2</GuncelRisk>
...
</KrediBilgi>
尝试从该行中删除斜杠“/”:
FROM TABLE(XMLSequence(Extract(l_xmlType,'KrediBilgi'))) p
你也可以从这样的行中删除第一个斜线
'KrediBilgi/Durum/text()'
【讨论】:
以上是关于将 clob 转换为 xml 解析错误的主要内容,如果未能解决你的问题,请参考以下文章
使用 PL/SQL 解析 XML 输出 html 中特定标签的内容
Json 解析错误:Java.lang.String 类型的值 <?xml 无法转换为 JSONArray [重复]