[英]Oracle PL/SQL parsing a nested object within xml using XMLTABLE
大家,我有以下问题 - 我正在使用 Oracle 11g,我正在尝试从 xml 文件中读取值。 这是 web 服务的响应:它的结构如下:
<Response id="response">
<ns14:StatusResponse>
<Code>3</Code>
<StatusName>Undefined</StatusName>
<FirstName>George</FirstName>
<MiddleName>Francis</MiddleName>
<LastName>Rosetown</LastName>
<Number>*******</Number>
<Gender>1</Gender>
<Relatives>
<Relative>
<OrderNumber>1</OrderNumber>
<FirstName>Louis</FirstName>
<MiddleName>Matel</MiddleName>
<LastName>Johnson</LastName>
<NUmber>********</Number>
<RelativeType>Spouse</RelativeType>
</Relative>
<Relative>
<OrderNumber>2</OrderNumber>
<FirstName>Jack</FirstName>
<MiddleName>Francis</MiddleName>
<LastName>Rosetown</LastName>
<EGN>**********</EGN>
<RelativeType>Son</RelativeType>
</Relative>
</Relatives>
<ReportDate>2019-09-05T15:22:42.6829678+03:00</ReportDate>
</StatusResponse>
</Response>
如何检索子节点“相对”的值? 我将响应中的信息连接起来,并形成一个 html 表,以便为最终用户进一步可视化。 我可以用什么来实现我的目标。 我对这些做法有点陌生。 提前致谢。
XMLTable 可以做到这一点。 我不得不对您的 XML 进行两个小改动 - 我删除了命名空间并修复了“NUMber”的大小写。 我确定在 Oracle XML 中有一种方法可以处理命名空间,我只是没有经验。 但您需要确保 XML 在语法上有效,否则将无法加载。
select OrderNumber, FirstName, MiddleName, LastName, EGN, RelativeType
from
(
select xmltype('
<Response id="response">
<StatusResponse>
<Code>3</Code>
<StatusName>Undefined</StatusName>
<FirstName>George</FirstName>
<MiddleName>Francis</MiddleName>
<LastName>Rosetown</LastName>
<Number>*******</Number>
<Gender>1</Gender>
<Relatives>
<Relative>
<OrderNumber>1</OrderNumber>
<FirstName>Louis</FirstName>
<MiddleName>Matel</MiddleName>
<LastName>Johnson</LastName>
<Number>********</Number>
<RelativeType>Spouse</RelativeType>
</Relative>
<Relative>
<OrderNumber>2</OrderNumber>
<FirstName>Jack</FirstName>
<MiddleName>Francis</MiddleName>
<LastName>Rosetown</LastName>
<EGN>**********</EGN>
<RelativeType>Son</RelativeType>
</Relative>
</Relatives>
<ReportDate>2019-09-05T15:22:42.6829678+03:00</ReportDate>
</StatusResponse>
</Response>') relative_xml
from dual
), xmltable('/Response/StatusResponse/Relatives/Relative'
passing relative_xml
columns
OrderNumber number path 'OrderNumber',
FirstName varchar2(4000) path 'FirstName',
MiddleName varchar2(4000) path 'MiddleName',
LastName varchar2(4000) path 'LastName',
EGN varchar2(4000) path 'EGN',
RelativeType varchar2(4000) path 'RelativeType'
);
结果:
ORDERNUMBER FIRSTNAME MIDDLENAME LASTNAME EGN RELATIVETYPE
----------- --------- ---------- -------- ---------- ------------
1 Louis Matel Johnson Spouse
2 Jack Franci Rosetown ********** Son
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.