nixp.ru v3.0

17 января 2017,
вторник,
16:00:37 MSK

DevOps с компанией «Флант»
wiener написал 26 июня 2005 года в 20:51 (246 просмотров) Ведет себя как мужчина; открыл 30 тем в форуме, оставил 76 комментариев на сайте.

Доброго вресени суток.

Вторую неделю пытаюсь разобраться с сабжем…читал man, Google, книгу купил, но толку ноль…., а надо совсем ничего…помогите плз.

Есть XML:

<server type=«APS» address=«elinora.u-l.ru» status=«UP»></server>

elinora.u-l.ru

Elinora Aliens vs. Predator 2 — http://Elinora.U-L.Ru/ [D]

avp2

<map>dm_compound</map>

2

16

6

0

Esterbi

0

64

0

FanLenD

0

43

0

Надо получить:

status из раздела server

hostname

name

map

numplayers

maxplayers

и массив name из раздела players

Заранее благодарен.

Feuerbach

Что читал?

Что и как пробовал делать? Что не получилось?

Genie

да как два пальца ;)

$xml=~/<server>&#40;&#46;&#42;&#63;&#41;<&#92;&#47;server>&#47;s; $f{server}=$2;<\/p><p>$f{status}=&#40;split &#47;=&#47;,&#40;grep &#47;&#94;status=&#47;,split &#47;&#92;s+&#47;,$1&#41;&#91;0&#93;&#41;&#91;1&#93;;<\/p><p>map{$f{server}=&#126;&#47;<$&#95;>&#40;&#46;&#42;&#63;&#41;<&#92;&#47;$&#95;>&#47;s; $f{$&#95;}=$1} qw&#40;hostname name map numplayers maxplayers players&#41;;<\/p><p>@names=map{$&#95;=&#126;&#47;<name>&#40;&#46;&#42;&#63;&#41;<&#92;&#47;name>&#47;; $1}grep &#47;<name>&#47;,split &#47;&#92;n&#47;,$f{players};<\/pre><\/div><\/p><p>в переменной $xml - твой конфиг<\/p><p>в массиве $f - нужные параметры (ну и плюс пара лишних, server и players)<\/p><p>в @names - как и просил, имена игроков.<\/p></server>
wiener
Feuerbach
Что читал?

Что и как пробовал делать? Что не получилось?

Читал статьи с OpenNet, man XML::Parser, XML::Simple + книга «Использование XML в Perl»

Конструкция описанная в XML::Simple ($xml->(variable)) не работает…говорит, что нет такого вызова…

От XML::Parser вообще ничего не удалось получить…

wiener
Genie
да как два пальца ;)

$xml=~/<server>&#40;&#46;&#42;&#63;&#41;<&#92;&#47;server>&#47;s; $f{server}=$2;<\/p><p>$f{status}=&#40;split &#47;=&#47;,&#40;grep &#47;&#94;status=&#47;,split &#47;&#92;s+&#47;,$1&#41;&#91;0&#93;&#41;&#91;1&#93;;<\/p><p>map{$f{server}=&#126;&#47;<$&#95;>&#40;&#46;&#42;&#63;&#41;<&#92;&#47;$&#95;>&#47;s; $f{$&#95;}=$1} qw&#40;hostname name map numplayers maxplayers players&#41;;<\/p><p>@names=map{$&#95;=&#126;&#47;<name>&#40;&#46;&#42;&#63;&#41;<&#92;&#47;name>&#47;; $1}grep &#47;<name>&#47;,split &#47;&#92;n&#47;,$f{players};<\/pre><\/div><\/p><p>в переменной $xml - твой конфиг<\/p><p>в массиве $f - нужные параметры (ну и плюс пара лишних, server и players)<\/p><p>в @names - как и просил, имена игроков.<\/blockquote><p>А можно массив разбросать по соответствующим переменным...?!<\/p></server>

Genie
wiener
А можно массив разбросать по соответствующим переменным…?!

эммм. можно, конечно же.

но может это в качестве д/з по perl-у сойдёт? ;)

впрочем, переменные можно назвать как они есть, по содержанию (типа так уж и быть, на первый раз расскажу):

$xml=~/<server>&#40;&#46;&#42;&#63;&#41;<&#92;&#47;server>&#47;s; $server=$2;<\/p><p>$status=&#40;split &#47;=&#47;,&#40;grep &#47;&#94;status=&#47;,split &#47;&#92;s+&#47;,$1&#41;&#91;0&#93;&#41;&#91;1&#93;;<\/p><p>map{$server=&#126;&#47;<$&#95;>&#40;&#46;&#42;&#63;&#41;<&#92;&#47;$&#95;>&#47;s; $$&#95;=$1} qw&#40;hostname name map numplayers maxplayers players&#41;;<\/p><p>@names=map{$&#95;=&#126;&#47;<name>&#40;&#46;&#42;&#63;&#41;<&#92;&#47;name>&#47;; $1}grep &#47;<name>&#47;,split &#47;&#92;n&#47;,$players;<\/pre><\/div><\/p><p>ps: правда, тут неявно есть одна засада: если тег <name> для имени сервера окажется <u>после<\/u> <players>, то тут будет один глюк ;)<\/p></server>
wiener

2 Genie: не работает… ругается на переменные и ссылки…

Люди !!! Дайте РАБОЧИЙ код с использованием XML !!! PLZ !!!

Genie

чего?!

какую такую ошибку?

$ cat test.pl
#!/usr/bin/perl
$xml='<?xml version="1.0" encoding="iso-8859-1"?>
<server type="APS" address="elinora.u-l.ru" status="UP"></server> elinora.u-l.ru</hostname> Elinora Aliens vs. Predator 2 - http://Elinora.U-L.Ru/ [D]</name> avp2</gametype> <map>dm_compound</map>
2</numplayers>
16</maxplayers>
6</ping>
0</retries>


Esterbi</name>
0</score>
64</ping>
0</team>
</skin>
</mesh>
</face>
</player>

FanLenD</name>
0</score>
43</ping>
0</team>
</skin>
</mesh>
</face>
</player>
</players>
</server>
</qstat>';
$xml=~/<server>&#40;&#46;&#42;&#63;&#41;<&#92;&#47;server>&#47;s; $server=$2;<\/p><p>$status=&#40;split &#47;=&#47;,&#40;grep &#47;&#94;status=&#47;,split &#47;&#92;s+&#47;,$1&#41;&#91;0&#93;&#41;&#91;1&#93;;<\/p><p>map{$server=&#126;&#47;<$&#95;>&#40;&#46;&#42;&#63;&#41;<&#92;&#47;$&#95;>&#47;s; $$&#95;=$1} qw&#40;hostname name map numplayers maxplayers players&#41;;<\/p><p>@names=map{$&#95;=&#126;&#47;<name>&#40;&#46;&#42;&#63;&#41;<&#92;&#47;name>&#47;; $1}grep &#47;<name>&#47;,split &#47;&#92;n&#47;,$players;<\/p><p>print &#40;join "",map{"&#92;$$&#95;=$$&#95;&#92;n"} qw&#40;hostname name map numplayers maxplayers&#41;&#41;;<\/p><p>print "&#92;@names=@names&#92;n";<\/p><p>$ &#46;&#47;test&#46;pl<\/p><p>$hostname=elinora&#46;u&#45;l&#46;ru<\/p><p>$name=Elinora Aliens vs&#46; Predator 2 &#45; http&#58;&#47;&#47;Elinora&#46;U&#45;L&#46;Ru&#47; &#91;D&#93;<\/p><p>$map=dm&#95;compound<\/p><p>$numplayers=2<\/p><p>$maxplayers=16<\/p><p>@names=Esterbi FanLenD<\/pre><\/div><\/p></server> </map>
wiener

2 Genie:

#!/usr/bin/perl -w

use strict;

…будет что посмотреть…

…а как затащить содержимое файла в переменную ?! Я всё время затаскивал только в массив, а тут он не работает…

Feuerbach
wiener
…а как затащить содержимое файла в переменную ?! Я всё время затаскивал только в массив, а тут он не работает…



@lines = <>; $lines = join("",@lines);
Genie
Feuerbach

@lines = <>; $lines = join("",@lines);

можно и так:

$lines = join "", <>;

правда, если надо отдельного конкретного файла, а не указанных в командной строке и/или STDIN, то сперва открывать надо:

open FILE,"
$file_content = join "", ;
close FILE;


#!/usr/bin/perl -w

use strict;

…будет что посмотреть…

оно, конечно, есть, на что поглядеть..

только с use strict я пока что сам не в ладах ;)

ecobeingecobeing.ru
Экология и вегетарианство на благо всем живым существам Планеты.