我有以下情况: 我有一个xml文件,其中包含一个无限复杂类型的元素。
一个例子:
<Persons>
<LastName>A</LastName>
<FirstName>B</FirstName>
<Age>1</Age>
<LastName>C</LastName>
<FirstName>D</FirstName>
<Age>2</Age>
<LastName>E</LastName>
<FirstName>F</FirstName>
<LastName>G</LastName>
<FirstName>H</FirstName>
<Age>4</Age>
</Persons>
如您所见,我有一个人物结构,通过重复结构包含人物定义:
<LastName></LastName>
<FirstName></FirstName>
<Age></Age>
Age元素是可选的,因此它可能会出现在xml文档中。
我在Oracle Database 12c中使用pl sql过程处理此xml消息,然后插入到某些表中。
我尝试将XMLTABLE与一些Xquery一起使用但是我在处理可选值时遇到了困难,这种情况是 AGE元素。
有人可以给我一个小费o帮我解决这个问题吗?非常感谢!!!
亲切的问候
答案 0 :(得分:1)
不是最佳的,但可能有用:
描述:
SQL:
select value( Persons ).extract( 'Persons/LastName[position()='||rownum||']/text()' ).getStringVal() LastName,
value( Persons ).extract( 'Persons/LastName[position()='||rownum||']/following-sibling::*[position() = 1 and name() = ''FirstName'']/text()' ).getStringVal() FirstName,
value( Persons ).extract( 'Persons/LastName[position()='||rownum||']/following-sibling::*[position() = 2 and name() = ''Age'']/text()' ).getNumberVal() Age
from table( xmlsequence( xmltype( '<Persons>
<LastName>A</LastName>
<FirstName>B</FirstName>
<Age>1</Age>
<LastName>C</LastName>
<FirstName>D</FirstName>
<Age>2</Age>
<LastName>E</LastName>
<FirstName>F</FirstName>
<LastName>G</LastName>
<FirstName>H</FirstName>
<Age>4</Age>
</Persons>' ).extract( 'Persons/LastName' ) ) ) LastNames, table( xmlsequence( xmltype( '<Persons>
<LastName>A</LastName>
<FirstName>B</FirstName>
<Age>1</Age>
<LastName>C</LastName>
<FirstName>D</FirstName>
<Age>2</Age>
<LastName>E</LastName>
<FirstName>F</FirstName>
<LastName>G</LastName>
<FirstName>H</FirstName>
<Age>4</Age>
</Persons>' ) ) ) Persons