Форум: "Основная";
Текущий архив: 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