Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2015.09.27;
Скачать: CL | DM;

Вниз

Обработка очень интеренсого по формату XML,   Найти похожие ветки 

 
D-Rulez ©   (2012-04-03 17:39) [0]

Здравствуйте. Помогите, пожалуйста, следующий xml обработать и через clientdataset в dbgrid отобразить данные.

XML файл очень интересного типа. Его не может обработать XML Mapper: Выдает ошибку на строке 69 из-за длины строки (это значение AtrName11=max8000).
Хотелось бы как-то обработать данный xml и значения атрибутов с AtrName1 по AtrName13 – отобразить в dbgrid.

Проблема еще и в том, что хотя и некоторые атрибуты описаны в схеме, но их значений может и не быть, как AtrName5, например, в этом случае их можно заменить пустым значением NULL.

Как и чем можно обработать данный xml файл? Может компонента есть, которая сможет такое проглотить?
Или хоты бы как-то получить сами значения, или отсутствие атрибутов по отдельности из z:row?

Пример самого xml:

<xml xmlns:s="uuid:BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882"
xmlns:dt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882"
xmlns:rs="urn:schemas-microsoft-com:rowset"
xmlns:z="#RowsetSchema">
<s:Schema id="RowsetSchema">
<s:ElementType name="row" content="eltOnly">
 <s:AttributeType name="AtrName1" rs:number="1" rs:writeunknown="true">
  <s:datatype dt:type="int" dt:maxLength="4" rs:precision="10"
   rs:fixedlength="true" rs:maybenull="false"/>
 </s:AttributeType>
 <s:AttributeType name="AtrName2" rs:number="2" rs:writeunknown="true">
  <s:datatype dt:type="ui1" dt:maxLength="1" rs:precision="3"
   rs:fixedlength="true" rs:maybenull="false"/>
 </s:AttributeType>
 <s:AttributeType name="AtrName3" rs:number="3" rs:nullable="true"
   rs:writeunknown="true">
  <s:datatype dt:type="string" rs:dbtype="str" dt:maxLength="128"/>
 </s:AttributeType>
 <s:AttributeType name="AtrName4" rs:number="4" rs:writeunknown="true">
  <s:datatype dt:type="string" rs:dbtype="str" dt:maxLength="128"
   rs:maybenull="false"/>
 </s:AttributeType>
 <s:AttributeType name="AtrName5" rs:number="5" rs:nullable="true"
   rs:writeunknown="true">
  <s:datatype dt:type="string" rs:dbtype="str" dt:maxLength="1024"/>
 </s:AttributeType>
 <s:AttributeType name="AtrName6" rs:number="6" rs:writeunknown="true">
  <s:datatype dt:type="dateTime" rs:dbtype="timestamp"
   dt:maxLength="16" rs:scale="3" rs:precision="23" rs:fixedlength="true"
   rs:maybenull="false"/>
 </s:AttributeType>
 <s:AttributeType name="AtrName7" rs:number="7" rs:nullable="true"
   rs:writeunknown="true">
  <s:datatype dt:type="dateTime" rs:dbtype="timestamp"
   dt:maxLength="16" rs:scale="3" rs:precision="23" rs:fixedlength="true"/>
 </s:AttributeType>
 <s:AttributeType name="AtrName8" rs:number="8"
   rs:nullable="true" rs:writeunknown="true">
  <s:datatype dt:type="string" rs:dbtype="str" dt:maxLength="1024"/>
 </s:AttributeType>
 <s:AttributeType name="AtrName9" rs:number="9"
   rs:writeunknown="true">
  <s:datatype dt:type="boolean" dt:maxLength="2" rs:fixedlength="true"
   rs:maybenull="false"/>
 </s:AttributeType>
 <s:AttributeType name="AtrName10" rs:number="10" rs:nullable="true"
   rs:writeunknown="true">
  <s:datatype dt:type="int" dt:maxLength="4" rs:precision="10"
   rs:fixedlength="true"/>
 </s:AttributeType>
 <s:AttributeType name="AtrName11" rs:number="11" rs:nullable="true"
   rs:writeunknown="true">
  <s:datatype dt:type="string" rs:dbtype="str" dt:maxLength="8000"/>
 </s:AttributeType>
 <s:AttributeType name="AtrName12" rs:number="12" rs:nullable="true"
   rs:writeunknown="true">
  <s:datatype dt:type="string" rs:dbtype="str" dt:maxLength="8000"/>
 </s:AttributeType>
 <s:AttributeType name="AtrName13" rs:number="13" rs:nullable="true"
   rs:writeunknown="true">
  <s:datatype dt:type="string" rs:dbtype="str" dt:maxLength="255"/>
 </s:AttributeType>
 <s:extends type="rs:rowbase"/>
</s:ElementType>
</s:Schema>
<rs:data>
<z:row AtrName1="11" AtrName2="2" AtrName3="someword1"
  AtrName4="" AtrName6="2011-10-15T16:01:24.463000000"
  AtrName8="sometext1" AtrName9="False" AtrName11="veryveryveryveryryveryveryveryveryvery, and=again=, =veryveryvery=, andveryveryveryvery=, ==andveyveryvery, andendveryLongStringHelpMePLEASE"/>
</rs:data>
</xml>


 
CRLF   (2012-04-03 19:00) [1]

Удали <rs:data/>, скорми маперу, верни данные, работай.


 
D-Rulez ©   (2012-04-03 19:37) [2]

Не выходит. Датамаппер не берет атрибуты.


 
brother ©   (2012-04-03 19:59) [3]

Что, не выходит Данила-мастер у тебя каменный цветок?
Нееее, нееее выхооодит(
зы. что именно делал? Код? Симптомы?)


 
sniknik ©   (2012-04-03 20:02) [4]

вообще то это обычный ADO рекордсет, сохраненный как xml. значит и прочитать можно им же... без всяких преобразований.


 
D-Rulez ©   (2012-04-03 20:13) [5]

Вот и я подозреваю, что рекорд сет. А как прочитать?

В хмлтрансформ, и в клиентдатасет такой хмл не скормить. при активации ошибку выдаст. поля в клиент лата сет при этом указаны явно. но хмлтрнасформ не знает, как преобразовывать


 
D-Rulez ©   (2012-04-03 20:15) [6]

преобразовать не дает маппер, как писал в сообщении выше. т.е. схема хмл трансформ - клинетдатасет- дбгрид не работает


 
D-Rulez ©   (2012-04-03 20:25) [7]

из-за невоможности создать TransformRead


 
D-Rulez ©   (2012-04-03 20:29) [8]

Например, можно так

Clientdataset1.LoadFromFile("xo.xml");

ошибка - Mismatch in datapacket.


 
D-Rulez ©   (2012-04-03 20:35) [9]

Бросаем на форму XMLTransformProvider1
В Clientdataset1 задаем XMLTransformProvider1.

Но Transfomationfile must be specified. Его получить не удается из хмлмаппера.

Подскажите, что делаю не так?

Может, есть простое решение, а я о нем не знаю?


 
sniknik ©   (2012-04-03 20:42) [10]

тебе же сказали, что это ADO-шный рекордсет, что непонятно? написать, что он <> клиентскому? или - "нажми F1"?


 
D-Rulez ©   (2012-04-03 20:51) [11]

Хорошо. Адошный.

Код:
ADOQuery1.Recordset:=RecordsetFromXML(Memo1.Lines.Text);

На приведенном хмл дает:
An invalid character was found in text content.


 
D-Rulez ©   (2012-04-03 20:54) [12]

Так уже начинаю понимать. Что-то не то с символом где-то


 
D-Rulez ©   (2012-04-03 21:35) [13]

Пример заработал, но

function RecordsetFromXML(const XML: string): _Recordset;
var
  RS: Variant;
  Stream: TStringStream;
begin
  Result := nil;
  if XML = "" then Exit;
  try
    Stream := TStringStream.Create(XML);
    Stream.Position := 0;
    RS := CreateOleObject("ADODB.Recordset");
    RS.Open(TStreamAdapter.Create(Stream) as IUnknown);
    Result := IUnknown(RS) as _Recordset;
  finally
    Stream.Free;
  end;
end;

Функция не отрабатывает русские символы в значениях параметров (((


 
D-Rulez ©   (2012-04-03 21:36) [14]

Достаточно вставить в один из параметров любую русскую букву


 
sniknik ©   (2012-04-03 22:01) [15]

> Хорошо. Адошный.
одолжений не делай. не нужно? тогда брось это, нафига тебе это программирование?

> Код:
почему Query а не DataSet? ну вот серьезно почему у клиентского DataSet, а тут раз, и Query????????

> На приведенном хмл дает:
именно с приведенным все нормально.

p.s. ну прямо таки титанических усилий стоит поменять один тип набора данных на другой. без копипаста естественно.


 
sniknik ©   (2012-04-03 22:09) [16]

> Достаточно вставить в один из параметров любую русскую букву
для русских названий заголовок формируется не так.


 
sniknik ©   (2012-04-03 22:12) [17]

> не так.
да и сам он должен быть весь в юникоде.


 
D-Rulez ©   (2012-04-03 22:34) [18]

>для русских названий заголовок формируется не так.
>да и сам он должен быть весь в юникоде.
Вы про xml header? Если да, то поверьте загловки совпадают.

>p.s. ну прямо таки титанических усилий стоит поменять один тип набора >данных на другой. без копипаста естественно.
Благодарен за вашу помощь, и уверен, что вы все знаете.

Но посветите начинающего хотя бы самую малость в это таинство знаний?
Вы же тоже когда-то начинали с чего-то свой путь...


 
sniknik ©   (2012-04-03 22:40) [19]

> Вы про xml header? Если да, то поверьте загловки совпадают.
пр схему, для русских полей делаются синонимы для отображения.

> Но посветите начинающего хотя бы самую малость в это таинство знаний?
какие таинства??? сам же писал строку кода с клиентским, замени на адошниый... все.


 
D-Rulez ©   (2012-04-04 00:30) [20]

>какие таинства??? сам же писал строку кода с клиентским, замени на >адошниый... все.

Заменил. результат повторен:
An invalid character was found in text content.

Печалька.


 
sniknik ©   (2012-04-04 00:41) [21]

ЮНИКОД


 
D-Rulez ©   (2012-04-04 10:21) [22]

Delphi XE.
В настройках грида вставил RUSSIAN_CHARSET.
Но ошибка осталась.


 
D-Rulez ©   (2012-04-04 13:11) [23]

Пример XML:

<xml xmlns:s="uuid:BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882"
xmlns:dt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882"
xmlns:rs="urn:schemas-microsoft-com:rowset"
xmlns:z="#RowsetSchema">
<s:Schema id="RowsetSchema">
<s:ElementType name="row" content="eltOnly">
 <s:AttributeType name="AtrName1" rs:number="1" rs:writeunknown="true">
  <s:datatype dt:type="int" dt:maxLength="4" rs:precision="10"
   rs:fixedlength="true" rs:maybenull="false"/>
 </s:AttributeType>
 <s:AttributeType name="AtrName2" rs:number="2" rs:writeunknown="true">
  <s:datatype dt:type="ui1" dt:maxLength="1" rs:precision="3"
   rs:fixedlength="true" rs:maybenull="false"/>
 </s:AttributeType>
 <s:AttributeType name="AtrName3" rs:number="3" rs:nullable="true"
   rs:writeunknown="true">
  <s:datatype dt:type="string" rs:dbtype="str" dt:maxLength="128"/>
 </s:AttributeType>
 <s:AttributeType name="AtrName4" rs:number="4" rs:writeunknown="true">
  <s:datatype dt:type="string" rs:dbtype="str" dt:maxLength="128"
   rs:maybenull="false"/>
 </s:AttributeType>
 <s:AttributeType name="AtrName5" rs:number="5" rs:nullable="true"
   rs:writeunknown="true">
  <s:datatype dt:type="string" rs:dbtype="str" dt:maxLength="1024"/>
 </s:AttributeType>
 <s:AttributeType name="AtrName6" rs:number="6" rs:writeunknown="true">
  <s:datatype dt:type="dateTime" rs:dbtype="timestamp"
   dt:maxLength="16" rs:scale="3" rs:precision="23" rs:fixedlength="true"
   rs:maybenull="false"/>
 </s:AttributeType>
 <s:AttributeType name="AtrName7" rs:number="7" rs:nullable="true"
   rs:writeunknown="true">
  <s:datatype dt:type="dateTime" rs:dbtype="timestamp"
   dt:maxLength="16" rs:scale="3" rs:precision="23" rs:fixedlength="true"/>
 </s:AttributeType>
 <s:AttributeType name="AtrName8" rs:number="8"
   rs:nullable="true" rs:writeunknown="true">
  <s:datatype dt:type="string" rs:dbtype="str" dt:maxLength="1024"/>
 </s:AttributeType>
 <s:AttributeType name="AtrName9" rs:number="9"
   rs:writeunknown="true">
  <s:datatype dt:type="boolean" dt:maxLength="2" rs:fixedlength="true"
   rs:maybenull="false"/>
 </s:AttributeType>
 <s:AttributeType name="AtrName10" rs:number="10" rs:nullable="true"
   rs:writeunknown="true">
  <s:datatype dt:type="int" dt:maxLength="4" rs:precision="10"
   rs:fixedlength="true"/>
 </s:AttributeType>
 <s:AttributeType name="AtrName11" rs:number="11" rs:nullable="true"
   rs:writeunknown="true">
  <s:datatype dt:type="string" rs:dbtype="str" dt:maxLength="8000"/>
 </s:AttributeType>
 <s:AttributeType name="AtrName12" rs:number="12" rs:nullable="true"
   rs:writeunknown="true">
  <s:datatype dt:type="string" rs:dbtype="str" dt:maxLength="8000"/>
 </s:AttributeType>
 <s:AttributeType name="AtrName13" rs:number="13" rs:nullable="true"
   rs:writeunknown="true">
  <s:datatype dt:type="string" rs:dbtype="str" dt:maxLength="255"/>
 </s:AttributeType>
 <s:extends type="rs:rowbase"/>
</s:ElementType>
</s:Schema>
<rs:data>
<z:row AtrName1="11" AtrName2="2" AtrName3="someword1"
  AtrName4="" AtrName6="2011-10-15T16:01:24.463000000"
  AtrName8="русский текст не пройдет - Unicode" AtrName9="False" AtrName11="veryveryveryveryryveryveryveryveryvery, and=again=, =veryveryvery=, andveryveryveryvery=, ==andveyveryvery, andendveryLongStringHelpMePLEASE"/>
</rs:data>
</xml>


Вызов:
ADODataSet1.LoadFromFile(FileName);


 
sniknik ©   (2012-04-04 16:44) [24]

от подписи вида "Unicode" в значении поля, файл юникодным не станет.



Страницы: 1 вся ветка

Текущий архив: 2015.09.27;
Скачать: CL | DM;

Наверх




Память: 0.55 MB
Время: 0.007 c
2-1399458720
oleg_teacher
2014-05-07 14:32
2015.09.27
Вставить форматированый текст


2-1399631848
brother
2014-05-09 14:37
2015.09.27
TFileStream


2-1399220199
dis12345
2014-05-04 20:16
2015.09.27
округление-потеря копейки


15-1423517417
Юрий
2015-02-10 00:30
2015.09.27
С днем рождения ! 10 февраля 2015 вторник


1-1333460340
D-Rulez
2012-04-03 17:39
2015.09.27
Обработка очень интеренсого по формату XML,