помогите оптимизировать

B1
На сайте с 18.04.2009
Offline
14
413

Привет всем!

Помогите с оптимизацией кода для вытягивания данных из xml(*.fb2)

формат xml

<?xml version="1.0" encoding="windows-1251"?>

<FictionBook xmlns="http://www.gribuser.ru/xml/fictionbook/2.0" xmlns:l="http://www.w3.org/1999/xlink">

<description>

<title-info>

<author>

<first-name>Имя</first-name>

<middle-name>Отчество</middle-name>

<last-name>Фамилия</last-name>

</author>

<book-title>Название</book-title>

<annotation>

Аннотация книги

</annotation>

<coverpage>

<image l:href="#cover.jpg"/>

</coverpage>

</title-info>

</description>

<body>

Тест книги

</body>

<binary content-type="image/jpeg" id="cover.jpg"> бинарный код картинки </binary>

</xml>

то что получилось

нужно сократить или систематизировать код

<?php

session_start();

if (!isset($_SESSION['a'])) $_SESSION['a']='0';

if (!isset($_SESSION['b'])) $_SESSION['b']='0';

if (!isset($_SESSION['c'])) $_SESSION['c']='0';

$link = "book.fb2";

function startElement($parser, $name, $attrs)

{

global $intag,$dist;

if ($name=='title-info')

{

$_SESSION['b']='1';

}

elseif ($name=='document-info')

{

$_SESSION['b']='0';

};

if ($name=='annotation')

{

$_SESSION['c']='1';

}

else

{

$_SESSION['c']='0';

};

if ($name=='binary')

{

echo "<img src='data:image/png;base64,";

$_SESSION['a']='1';

}

elseif ($_SESSION['b']=='1' OR $_SESSION['c']=='1')

{

if ($name=='last-name' OR $name=='first-name' OR $name=='annotation' OR $name=='p' OR $name=='book-title') { $_SESSION['a']='1'; } else { $_SESSION['a']='0'; };

}

else

{

$_SESSION['a']='0';

};

if ($name=='p') { if ($_SESSION['b']=='1' OR $_SESSION['c']=='1') echo "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"; };

};

function endElement($parser, $name)

{

global $intag,$dist;

if ($_SESSION['a']=='1' AND $name=='p') echo "<br>";

if ($name=='last-name' OR $name=='book-title') echo "<br>";

if ($name=='binary') echo "'/>";

}

function characterData($parser, $data)

{

global $dist,$intag;

if ($_SESSION['a']=='1') echo "$data";

};

$xml_parser = xml_parser_create();

xml_set_element_handler($xml_parser, "startElement", "endElement");

xml_set_character_data_handler($xml_parser, "characterData");

xml_parser_set_option($xml_parser, XML_OPTION_CASE_FOLDING, false);

if (!($fp = fopen($link, "r"))) die("could not open XML input");

while ($data = fread($fp, 4096))

{

if (!xml_parse($xml_parser, $data, feof($fp)))

die(sprintf("XML error: %s at line %d", xml_error_string(xml_get_error_code($xml_parser)), xml_get_current_line_number($xml_parser)));

}

xml_parser_free($xml_parser);

?>

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий