Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2015.09.27;
Скачать: [xml.tar.bz2];

Вниз

Обработка очень интеренсого по формату 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.53 MB
Время: 0.003 c
15-1420320602
Юрий
2015-01-04 00:30
2015.09.27
С днем рождения ! 4 января 2015 воскресенье


15-1423258204
Юрий
2015-02-07 00:30
2015.09.27
С днем рождения ! 7 февраля 2015 суббота


15-1423776652
Юрий
2015-02-13 00:30
2015.09.27
С днем рождения ! 13 февраля 2015 пятница


2-1392184427
HF-Trade
2014-02-12 09:53
2015.09.27
C php на Delphi


15-1423431005
Юрий
2015-02-09 00:30
2015.09.27
С днем рождения ! 9 февраля 2015 понедельник





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский