Onore
Новичок
Парсинг XML, в адрибутах очень обольшой текст.
Здравствуйте.
Подскажите как парситься ХМЛ, то есть если много данных внутри ноды то функция viewData запускается множество раз.
А что если в атрибутах передается много данных? И насколько эффективно их там держать?
Здравствуйте.
Подскажите как парситься ХМЛ, то есть если много данных внутри ноды то функция viewData запускается множество раз.
А что если в атрибутах передается много данных? И насколько эффективно их там держать?
PHP:
$file = "all_offers.xml";
$depth = array();
$authorId_arr = array();
$fp_table = 1;
$authorTag_arr = array('AUTHOR_URL', 'AUTHOR_NAME', ..., 'AUTHOR_EMAIL');
function startElement($parser, $name, $attrs)
{
global $depth, $fp_table, $tagName;
global $endData;
$tagName = $name;
if ($name == "OFFERS") {
$fp_table = fopen("all_author.txt", "w") or die("Error:" .$fp_table);
}
if ($tagName == "OFFERS") @fputs($fp_table, "<AUTHORS>"); // BIGIN AUTHORS
$depth[$parser]++;
}
function endElement($parser, $tagName)
{
global $depth, $fp_table;
global $authorIsUnic, $authorTag_arr;
$depth[$parser]--;
if ($tagName == "OFFERS") {
@fputs($fp_table, "</AUTHORS>"); // END AUTHORS
fclose($fp_table);
}
if($authorIsUnic && in_array($tagName, $authorTag_arr)) @fputs($fp_table, "</" .$tagName. ">");
if($authorIsUnic && $tagName == "OFFER") @fputs($fp_table, "</AUTHOR>");
}
function viewData($parser, $data)
{
global $fp_table;
global $tagName, $tagNamePrev, $authorId_arr, $authorTag_arr, $authorIsUnic;
if($tagName == "AUTHOR_ID") {
if(!in_array($data, $authorId_arr)) {
$authorIsUnic = true;
@fputs($fp_table, "<AUTHOR>\r\n");
@fputs($fp_table, "<" .$tagName. ">" .$data. "</" .$tagName. ">\r\n");
} else {
$authorIsUnic = false;
}
array_push($authorId_arr, $data);
}
if($authorIsUnic && in_array($tagName, $authorTag_arr) ) {
if($tagName != $tagNamePrev) @fputs($fp_table, "<" .$tagName. ">");
@fputs($fp_table, $data);
$tagNamePrev = $tagName;
}
}
$xml_parser = xml_parser_create();
xml_set_element_handler($xml_parser, "startElement", "endElement");
xml_set_default_handler($xml_parser, "viewData");
if (!($fp = fopen($file, "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);