我被要求从现有数据库中提取数据以获取工作程序。该数据与过滤器实用程序有关。我需要能够提取过滤器数据并最终构建一个匹配的SQL语句。问题是,我不认识数据格式。
<Filter Entity="Ticket">
<Where>
<Field Name="COLUMN_1" Value="A" CaseSensitive="false" />
<Field Name="COLUMN_2" Value="B" CaseSensitive="false" />
<Field Name="COLUMN_3" Value="C" CaseSensitive="false" />
<Field Name="COLUMN_4" Value="D" CaseSensitive="false" />
</Where>
<Sort>
<Field Name="COLUMN_1" Direction="Ascending" />
</Sort>
<Grouping>
<Field Name="COLUMN_1" Order="0" />
<Field Name="COLUMN_2" Order="1" />
</Grouping>
</Filter>
最后,我需要将其解析成某种可用的格式。对我来说,这意味着一张桌子。我以前在Oracle中使用过XMLTable函数,如果这是XML的话会很有用。有人有提示吗?
所需的输出表:
|CLAUSE |NAME |VALUE |CASE |DIRECTION |ORDER |
-----------------------------------------------------
|Where |COLUMN_1 |A |false | | |
|Where |COLUMN_2 |B |false | | |
|Where |COLUMN_3 |C |false | | |
|Where |COLUMN_4 |D |false | | |
|Sort |COLUMN_1 | | |Ascending | |
|Grouping |COLUMN_2 | | | |0 |
|Grouping |COLUMN_1 | | | |1 |
DB是Oracle 11g。我不知道用什么语言来构建应用程序。
答案 0 :(得分:2)
正如Tom Kimber在评论中所说的那样,这就是XML;它只是使用超出你希望的属性而不是元素/节点值。
您可以使用XMLTable提取属性值以及元素/节点值:
select * from xmltable (
'/Filter/*/Field'
passing xmltype('<Filter Entity="Ticket">
<Where>
<Field Name="COLUMN_1" Value="A" CaseSensitive="false" />
<Field Name="COLUMN_2" Value="B" CaseSensitive="false" />
<Field Name="COLUMN_3" Value="C" CaseSensitive="false" />
<Field Name="COLUMN_4" Value="D" CaseSensitive="false" />
</Where>
<Sort>
<Field Name="COLUMN_1" Direction="Ascending" />
</Sort>
<Grouping>
<Field Name="COLUMN_1" Order="0" />
<Field Name="COLUMN_2" Order="1" />
</Grouping>
</Filter>')
columns clause varchar2(10) path 'local-name(..)',
name varchar2(10) path '@Name',
value varchar2(10) path '@Value',
case_sensitive varchar2(5) path '@CaseSensitive',
direction varchar2(10) path '@Direction',
order_num number path '@Order'
);
CLAUSE NAME VALUE CASE_ DIRECTION ORDER_NUM
---------- ---------- ---------- ----- ---------- ----------
Where COLUMN_1 A false
Where COLUMN_2 B false
Where COLUMN_3 C false
Where COLUMN_4 D false
Sort COLUMN_1 Ascending
Grouping COLUMN_1 0
Grouping COLUMN_2 1
路径中的@attr
获取具有该名称的属性; local-name(..)
获取父节点的元素名称(Field节点)。
例如,你也可以使用更复杂的XPath将属性转换为元素值,但我不确定你在这里获得多少收获。