@g@(nno,"@",nno)="" ссылка на родительские елементы /справочно,
для
ускорения поиска/
Если значение или атрибуты не опреледено, то некторых элементов может
не
быть. например: "Z","A","*","N"
Примеры разбора ХМЛ данныхъ:
1. Элемент не имеющий вложений и значений описывется краткой
формой:
<my atr="1"
/>
или <myno />
,"T")="ELEMENT"
,"T")="ELEMENT"
...
,"N")="my"
... ,"N")="myno"
,"P")="/my"
,"P")="/myno"
,"A","atr")=1
2. Полная форма:
<my
atr="2">value<my2>value</my2></my>
nno+0,"T")="ELEMENT"
,"N")="my"
...
,"P")="/my"
,"A","atr")=2
,"Z")="value"
."*",nno+1)=""
nno+1,"T")="ELEMENT"
,"N")="my2"
...
,"P")="/my/my2"
,"Z")="value"
"@",nno+0)=""
3. Распил CDATA, в данном блоке все елементы действующие, поэтому
сохраняем
всё. Пример:
<?xml version="1.0" encoding="CP1251"?>
<Export
generator="Mumps" version="0.9">
<Document
name="mydata"><![CDATA[
#!/perl -w
use Net::Telnet ();
my ($hostname, $line, $passwd, $telnet,
$username);
$hostname = "127.0.0.1";
$telnet = new Net::Telnet (Telnetmode
=> 1, Dump_Log => "t5.log");
$telnet->open(Host =>
$hostname, Port => 23);
$line = $telnet->getline;
print
$line;
$telnet->print("SET A=999 ZW");
print
"1:",$telnet->getline;
print "2:",$telnet->getline;
exit;
]]></Document></Export>
Превращается в указанную ниже структуру:
<?xml version="1.0" encoding="CP1251"?>
0,"T")="XML"
,"N")="xml"
,"P")="/xml"
,"A","version")="1.0"
,"A","encoding")="CP1251"
<Export generator="Mumps" version="0.9"> //начало коневого
элемента
1,"T")="ELEMENT"
,"N")="Export"
,"P")="/Export"
,"A","version")="0.9"
,"A","generator")="Mumps"
,"*",2)="" //есть вложения
,"@",0)="" //формально корень сам на себя не может
ссылатся
</Export>
<Document name="mydata">
2,"T")="ELEMENT"
,"N")="Document"
,"P")="/Export/Document"
,"A","name")="mydata"
,"Z")=""
,"*",3)="" //есть вложения
,"@",1)="" //родитель здесь, кто нас породил
типа
</Document>
<![CDATA[ ...
3,"T")="CDATA"
,"@",2)="" //родитель здесь
,"P")="/Export/Document/CDATA"
,"Z",1)="#!/perl
-w"
,"Z",2)=""
,"Z",3)="use
Net::Telnet ();"
,"Z",4)="my ($hostname, $line, $passwd,
$telnet, $username);"
,"Z",5)="$hostname =
"127.0.0.1";"
,"Z",6)="$telnet = new Net::Telnet
(Telnetmode => 1, Dump_Log =>
"t5.log");"
,"Z",7)="$telnet->open(Host =>
$hostname, Port => 23);"
,"Z",8)="$line =
$telnet->getline;"
,"Z",9)="print
$line;"
,"Z",10)="$telnet->print("SET A=999
ZW");"
,"Z",11)="print
"1:",$telnet->getline;"
,"Z",12)="print
"2:",$telnet->getline;"
,"Z",13)="exit;"
,"Z",14)=""
]]>