Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 Разбор хитрого XML  [new]
olegvidnov
Member

Откуда:
Сообщений: 15
Коллеги, добрый день.
Есть у меня XML
<?xml version="1.0" encoding="utf-8" ?>
<Entity xmlns="http://schemas.microsoft.com/xrm/2011/Contracts" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<Attributes xmlns:a="http://schemas.datacontract.org/2004/07/System.Collections.Generic">

<KeyValuePairOfstringanyType>
<a:key>keyparam1</a:key> 
<a:value i:type="b:string" xmlns:b="http://www.w3.org/2001/XMLSchema">valueparam1</a:value> 
</KeyValuePairOfstringanyType>

<KeyValuePairOfstringanyType>
<a:key>keyparam2</a:key> 
<a:value i:type="OptionSetValue">
<Value>valueparam2</Value> 
</a:value>
</KeyValuePairOfstringanyType>

<KeyValuePairOfstringanyType>
<a:key>keyparam3</a:key> 
<a:value i:type="EntityReference">
<Id>1fd02b5d-0a5b-de11-9a9d-005056903a9e</Id> 
<LogicalName>lnameparam3</LogicalName>
<Name>nameparam3</Name>
</a:value>
</KeyValuePairOfstringanyType>

</Attributes>

<EntityState i:nil="true" />

<FormattedValues xmlns:a="http://schemas.datacontract.org/2004/07/System.Collections.Generic">

<KeyValuePairOfstringstring>
<a:key>statuscode</a:key>
<a:value>valuestatuscode</a:value>
</KeyValuePairOfstringstring>

<KeyValuePairOfstringstring>
<a:key>last_remark</a:key>
<a:value>valuelastremark</a:value>
</KeyValuePairOfstringstring>

</FormattedValues>

<Id>e4046663-a49a-e211-8478-005056af0021</Id>

<LogicalName>lead</LogicalName>

<RelatedEntities xmlns:a="http://schemas.datacontract.org/2004/07/System.Collections.Generic" />

</Entity>


пытался его разобрать...
целиком так и не получилось.

делаю одну часть...

select
Extractvalue(value(x), '//key',              'xmlns="http://schemas.datacontract.org/2004/07/System.Collections.Generic"') Q
,Extractvalue(value(x), '//value',              'xmlns="http://schemas.datacontract.org/2004/07/System.Collections.Generic"') W

  from table
       ( xmlsequence
         ( xmltype
           (
'МОЙ XML'
).extract('//KeyValuePairOfstringstring', 'xmlns="http://schemas.microsoft.com/xrm/2011/Contracts"')
         )
       ) x


а как разобрать так что бы получилась табличка | параметр | значение |

ну или в случае с
<KeyValuePairOfstringanyType>
<a:key>keyparam3</a:key> 
<a:value i:type="EntityReference">
<Id>1fd02b5d-0a5b-de11-9a9d-005056903a9e</Id> 
<LogicalName>lnameparam3</LogicalName>
<Name>nameparam3</Name>
</a:value>
</KeyValuePairOfstringanyType>


| keyparam3 | Id | LogicalName | Name |
20 авг 13, 12:33    [14730080]     Ответить | Цитировать Сообщить модератору
 Re: Разбор хитрого XML  [new]
olegvidnov
Member

Откуда:
Сообщений: 15
придумал вот так
select
Extractvalue(value(x), 'key',   'xmlns="http://schemas.datacontract.org/2004/07/System.Collections.Generic"') Q
, Extractvalue(value(x), 'value/text()',   'xmlns="http://schemas.datacontract.org/2004/07/System.Collections.Generic"') Q
, Extractvalue(value(x), 'Name',   'xmlns="http://schemas.microsoft.com/xrm/2011/Contracts"') Q
, Extractvalue(value(x), 'LogicalName',   'xmlns="http://schemas.microsoft.com/xrm/2011/Contracts"') Q
, Extractvalue(value(x), 'Id',   'xmlns="http://schemas.microsoft.com/xrm/2011/Contracts"') Q


  from table
       ( xmlsequence
         ( xmltype
           (
'<?xml version="1.0" encoding="utf-8" ?>
<Entity xmlns="http://schemas.microsoft.com/xrm/2011/Contracts" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<Attributes xmlns:a="http://schemas.datacontract.org/2004/07/System.Collections.Generic">

<KeyValuePairOfstringanyType>
<a:key>keyparam1</a:key> 
<a:value i:type="b:string" xmlns:b="http://www.w3.org/2001/XMLSchema">valueparam1</a:value> 
</KeyValuePairOfstringanyType>

<KeyValuePairOfstringanyType>
<a:key>keyparam2</a:key> 
<a:value i:type="OptionSetValue">
<Value>valueparam2</Value> 
</a:value>
</KeyValuePairOfstringanyType>

<KeyValuePairOfstringanyType>
<a:key>keyparam3</a:key> 
<a:value i:type="EntityReference">
<Id>1fd02b5d-0a5b-de11-9a9d-005056903a9e</Id> 
<LogicalName>lnameparam3</LogicalName>
<Name>nameparam3</Name>
</a:value>
</KeyValuePairOfstringanyType>

</Attributes>

<EntityState i:nil="true" />

<FormattedValues xmlns:a="http://schemas.datacontract.org/2004/07/System.Collections.Generic">

<KeyValuePairOfstringstring>
<a:key>statuscode</a:key>
<a:value>valuestatuscode</a:value>
</KeyValuePairOfstringstring>

<KeyValuePairOfstringstring>
<a:key>last_remark</a:key>
<a:value>valuelastremark</a:value>
</KeyValuePairOfstringstring>

</FormattedValues>

<Id>e4046663-a49a-e211-8478-005056af0021</Id>

<LogicalName>lead</LogicalName>

<RelatedEntities xmlns:a="http://schemas.datacontract.org/2004/07/System.Collections.Generic" />

</Entity>'
).extract('//*', 'xmlns="http://schemas.microsoft.com/xrm/2011/Contracts"')
         )
       ) x


и получаю

statuscode
last_remark
keyparam3
keyparam2
keyparam1
valueparam1
1fd02b5d-0a5b-de11-9a9d-005056903a9e
lnameparam3
nameparam3
valuestatuscode
valuelastremark
e4046663-a49a-e211-8478-005056af0021
lead

а хотелось бы вот так
keyparam1 valueparam1

keyparam2 valueparam2

keyparam3 1fd02b5d-0a5b-de11-9a9d-005056903a9e lnameparam3 nameparam3
.....

как этого добиться ?
20 авг 13, 14:46    [14731109]     Ответить | Цитировать Сообщить модератору
 Re: Разбор хитрого XML  [new]
olegvidnov
Member

Откуда:
Сообщений: 15
сорри форматирование слетело (
20 авг 13, 14:47    [14731115]     Ответить | Цитировать Сообщить модератору
 Re: Разбор хитрого XML  [new]
bdsm_sql
Member

Откуда:
Сообщений: 948
select *
  from xmltable(xmlnamespaces(
      default 'http://schemas.microsoft.com/xrm/2011/Contracts',
      'http://schemas.datacontract.org/2004/07/System.Collections.Generic' as "a",
      'http://www.w3.org/2001/XMLSchema-instance' as "i"),
    '//node()[a:key]' passing xmltype
           (
'<?xml version="1.0" encoding="utf-8" ?>
<Entity xmlns="http://schemas.microsoft.com/xrm/2011/Contracts" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<Attributes xmlns:a="http://schemas.datacontract.org/2004/07/System.Collections.Generic">

<KeyValuePairOfstringanyType>
<a:key>keyparam1</a:key> 
<a:value i:type="b:string" xmlns:b="http://www.w3.org/2001/XMLSchema">valueparam1</a:value> 
</KeyValuePairOfstringanyType>

<KeyValuePairOfstringanyType>
<a:key>keyparam2</a:key> 
<a:value i:type="OptionSetValue">
<Value>valueparam2</Value> 
</a:value>
</KeyValuePairOfstringanyType>

<KeyValuePairOfstringanyType>
<a:key>keyparam3</a:key> 
<a:value i:type="EntityReference">
<Id>1fd02b5d-0a5b-de11-9a9d-005056903a9e</Id> 
<LogicalName>lnameparam3</LogicalName>
<Name>nameparam3</Name>
</a:value>
</KeyValuePairOfstringanyType>

</Attributes>

<EntityState i:nil="true" />

<FormattedValues xmlns:a="http://schemas.datacontract.org/2004/07/System.Collections.Generic">

<KeyValuePairOfstringstring>
<a:key>statuscode</a:key>
<a:value>valuestatuscode</a:value>
</KeyValuePairOfstringstring>

<KeyValuePairOfstringstring>
<a:key>last_remark</a:key>
<a:value>valuelastremark</a:value>
</KeyValuePairOfstringstring>

</FormattedValues>

<Id>e4046663-a49a-e211-8478-005056af0021</Id>

<LogicalName>lead</LogicalName>

<RelatedEntities xmlns:a="http://schemas.datacontract.org/2004/07/System.Collections.Generic" />

</Entity>') columns
  "KEY" varchar2(4000) path 'a:key',
  "VALUE" varchar2(4000) path 'concat(a:value[@i:type="b:string"], a:value[@i:type="OptionSetValue"]/Value, .[name()="KeyValuePairOfstringstring"]/a:value)',
  "ID" varchar2(4000) path 'a:value[@i:type="EntityReference"]/Id',
  "LOGICALNAME" varchar2(4000) path 'a:value[@i:type="EntityReference"]/LogicalName',
  "NAME" varchar2(4000) path 'a:value[@i:type="EntityReference"]/Name'
  )
20 авг 13, 15:07    [14731259]     Ответить | Цитировать Сообщить модератору
 Re: Разбор хитрого XML  [new]
olegvidnov
Member

Откуда:
Сообщений: 15
bdsm_sql,

еху, спс огромное ;-) все как нужно...
давно работал с XML просто, все вылетело из головы
20 авг 13, 15:48    [14731497]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить