Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   как разбить большой XML на не сколько меньших ? (http://www.flasher.ru/forum/showthread.php?t=131332)

Artic 18.10.2009 02:48

как разбить большой XML на не сколько меньших ?
 
привет !
к примеру
Код:

<nameChild><![CDATA[aboutsub]]></nameChild>
  <type><![CDATA[MenuSub]]></type>
  <content><![CDATA[<P ALIGN="LEFT"><FONT FACE="Times Roman" SIZE="12" COLOR="#000000" LETTERSPACING="0" KERNING="0">AboutSub</FONT></P>]]></content>
  <position><![CDATA[0]]></position>
  <unicObjectName><![CDATA[]]></unicObjectName>
  <object><![CDATA[]]></object>
  <MenuX><![CDATA[]]></MenuX>
  <MenuY><![CDATA[]]></MenuY>
  <MenuW><![CDATA[]]></MenuW>
  <MenuH><![CDATA[]]></MenuH>
  <nameChild><![CDATA[samesub]]></nameChild>
  <type><![CDATA[MenuSub]]></type>
  <content><![CDATA[<P ALIGN="LEFT"><FONT FACE="Times Roman" SIZE="12" COLOR="#000000" LETTERSPACING="0" KERNING="0">sameSub</FONT></P>]]></content>
  <position><![CDATA[2]]></position>
  <unicObjectName><![CDATA[]]></unicObjectName>
  <object><![CDATA[]]></object>
  <MenuX><![CDATA[]]></MenuX>
  <MenuY><![CDATA[]]></MenuY>
  <MenuW><![CDATA[]]></MenuW>
  <MenuH><![CDATA[]]></MenuH>

итак как сделать вот так
1 XML
Код:

<nameChild><![CDATA[aboutsub]]></nameChild>
  <type><![CDATA[MenuSub]]></type>
  <content><![CDATA[<P ALIGN="LEFT"><FONT FACE="Times Roman" SIZE="12" COLOR="#000000" LETTERSPACING="0" KERNING="0">AboutSub</FONT></P>]]></content>
  <position><![CDATA[0]]></position>
  <unicObjectName><![CDATA[]]></unicObjectName>
  <object><![CDATA[]]></object>
  <MenuX><![CDATA[]]></MenuX>
  <MenuY><![CDATA[]]></MenuY>
  <MenuW><![CDATA[]]></MenuW>
  <MenuH><![CDATA[]]></MenuH>

2 XML
Код:

<nameChild><![CDATA[samesub]]></nameChild>
  <type><![CDATA[MenuSub]]></type>
  <content><![CDATA[<P ALIGN="LEFT"><FONT FACE="Times Roman" SIZE="12" COLOR="#000000" LETTERSPACING="0" KERNING="0">sameSub</FONT></P>]]></content>
  <position><![CDATA[2]]></position>
  <unicObjectName><![CDATA[]]></unicObjectName>
  <object><![CDATA[]]></object>
  <MenuX><![CDATA[]]></MenuX>
  <MenuY><![CDATA[]]></MenuY>
  <MenuW><![CDATA[]]></MenuW>
  <MenuH><![CDATA[]]></MenuH>

???

wvxvw 18.10.2009 04:32

Это во всех 3х случаях невалидный XML - а поэтому не понятно, что именно вы хотите сделать. Если вы дадите вариант где все части валидные, или не должны быть ХМЛем, то решить это будет проще.

Artic 18.10.2009 07:37

Код:

<entire><nameChild><![CDATA[aboutsub]]></nameChild>
<type><![CDATA[MenuSub]]></type>
<position><![CDATA[0]]></position>
<unicObjectName><![CDATA[]]></unicObjectName>
<object><![CDATA[]]></object>
<MenuX><![CDATA[]]></MenuX>
<MenuY><![CDATA[]]></MenuY>
<MenuW><![CDATA[]]></MenuW>
<MenuH><![CDATA[]]></MenuH>
<nameChild><![CDATA[samesub]]></nameChild>
<type><![CDATA[MenuSub]]></type>
<position><![CDATA[2]]></position>
<unicObjectName><![CDATA[]]></unicObjectName>
<object><![CDATA[]]></object>
<MenuX><![CDATA[]]></MenuX>
<MenuY><![CDATA[]]></MenuY>
<MenuW><![CDATA[]]></MenuW>
<MenuH><![CDATA[]]></MenuH></entire>

итак как сделать вот так
1 XML
Код:

<entire>
<nameChild><![CDATA[aboutsub]]></nameChild>
<type><![CDATA[MenuSub]]></type>
<position><![CDATA[0]]></position>
<unicObjectName><![CDATA[]]></unicObjectName>
<object><![CDATA[]]></object>
<MenuX><![CDATA[]]></MenuX>
<MenuY><![CDATA[]]></MenuY>
<MenuW><![CDATA[]]></MenuW>
<MenuH><![CDATA[]]></MenuH>
</entire>

2 XML
Код:

<entire>
<nameChild><![CDATA[samesub]]></nameChild>
<type><![CDATA[MenuSub]]></type>
<position><![CDATA[2]]></position>
<unicObjectName><![CDATA[]]></unicObjectName>
<object><![CDATA[]]></object>
<MenuX><![CDATA[]]></MenuX>
<MenuY><![CDATA[]]></MenuY>
<MenuW><![CDATA[]]></MenuW>
<MenuH><![CDATA[]]></MenuH>
</entire>

вот так XML валидный
я просто не стал в первый раз приводить рутовый узел так как к делу он отношения не имеет !

etc 18.10.2009 12:05

Ну только если считать, что nameChild является первым тегом в каждом куске, то взяв их индексы, можно промежуточные узлы перепихать в новые XML.

Felicast 18.10.2009 12:27

можно в цикле for:
Код AS3:

var xmls:Array/*of XML*/;
var tmpXML:XML;
for (var i:int; i < count; ++i)
{
        tmpXML = new XML("<entire/>");
        tmpXML.nameChild = sourceXML.nameChild[i];
        tmpXML.type = sourceXML.type[i];
        //.......
        xmls.push(tmpXML);
}

(может, что-нибудь напутал или не совсем оптимизировано, писал "на коленке")

wvxvw 18.10.2009 15:12

Код AS3:

var xml:XML =
<entire>
        <nameChild><![CDATA[aboutsub]]></nameChild>
        <type><![CDATA[MenuSub]]></type>
        <position><![CDATA[0]]></position>
        <unicObjectName><![CDATA[]]></unicObjectName>
        <object><![CDATA[]]></object>
        <MenuX><![CDATA[]]></MenuX>
        <MenuY><![CDATA[]]></MenuY>
        <MenuW><![CDATA[]]></MenuW>
        <MenuH><![CDATA[]]></MenuH>
        <nameChild><![CDATA[samesub]]></nameChild>
        <type><![CDATA[MenuSub]]></type>
        <position><![CDATA[2]]></position>
        <unicObjectName><![CDATA[]]></unicObjectName>
        <object><![CDATA[]]></object>
        <MenuX><![CDATA[]]></MenuX>
        <MenuY><![CDATA[]]></MenuY>
        <MenuW><![CDATA[]]></MenuW>
        <MenuH><![CDATA[]]></MenuH>
</entire>;
 
var aLists:Array = [];
 
xml.*.(localName().toString() === "nameChild" ?
          aLists.unshift(<entire>{XMLList(valueOf())}</entire>) :
          aLists[0].* += valueOf());
 
aLists = aLists.reverse();
trace(aLists[0].toXMLString());

:D

Felicast 18.10.2009 16:15

2wvxvw: с таким кодом без пол литры не разобраться.

UPD через 3 минуты: урррра!!! я разобрался :D

Artic 18.10.2009 18:18

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

Добавлено через 3 минуты
PS wvxvw редко встретишь такие хитрые решения ! вчитался в код )))) круто !

etc 18.10.2009 18:30

wvxvw, злыдень. В качестве потренироваться круто, но на живую за такое надо ручки оторвать.

wvxvw 18.10.2009 18:54

Ну это ерунда, мне где-то попадалась игра пятнашки написаная вся в одну строчку :)


Часовой пояс GMT +4, время: 01:11.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.