xml в крупных размерах - Михаил Крайнюк, drupaljedi

20
XML в крупных размерах Михаил Крайнюк

Upload: drupalsib

Post on 23-Jan-2018

90 views

Category:

Technology


0 download

TRANSCRIPT

Page 1: XML в крупных размерах - Михаил Крайнюк, DrupalJedi

XML в крупных размерах

Михаил Крайнюк

Page 2: XML в крупных размерах - Михаил Крайнюк, DrupalJedi

Михаил Крайнюк Drupal senior developer

Мой опыт в Drupal разработке

●  Разработка ●  Управление проектами ●  Drupal аудит ●  Консультация ●  Локализация Drupal ●  Разработка Drupal модулей

Page 3: XML в крупных размерах - Михаил Крайнюк, DrupalJedi

XML <?xml version="1.0" encoding="UTF-8" standalone="yes"?>

<ord>

<status>new</status>

<regNumber>123</regNumber>

<date>2017-05-09T03:00:00+03:00</date>

<type>article</type>

<attachments name="test.txt">0KFKOAM287F98GS87D

SDFS02E9+F09-ASDFO2W</attachments>

</ord>

Page 4: XML в крупных размерах - Михаил Крайнюк, DrupalJedi

Feeds

Page 5: XML в крупных размерах - Михаил Крайнюк, DrupalJedi

Feeds

Page 6: XML в крупных размерах - Михаил Крайнюк, DrupalJedi

XML

This XML is… Simple!

Page 7: XML в крупных размерах - Михаил Крайнюк, DrupalJedi

SimpleXML $up_file = file_get_contents('php://input');

$ref = new SimpleXMLElement($up_file);

$result = $ref->xpath('/ord/regNumber');

$string = (string) $result[0];

Page 8: XML в крупных размерах - Михаил Крайнюк, DrupalJedi

SimpleXML $string = (string) $result[0];

$file_new = file_save_data(base64_decode(trim($string)),

$path, TRUE);

$node->field_files[LANGUAGE_NONE][$id] = array(

'fid' => $file_new->fid,

'display' => 1,

'description' => '',

);

Page 9: XML в крупных размерах - Михаил Крайнюк, DrupalJedi

Happy

Page 10: XML в крупных размерах - Михаил Крайнюк, DrupalJedi

Oops

Page 11: XML в крупных размерах - Михаил Крайнюк, DrupalJedi

SimpleXML

Page 12: XML в крупных размерах - Михаил Крайнюк, DrupalJedi

SimpleXML

Page 13: XML в крупных размерах - Михаил Крайнюк, DrupalJedi

XML stream

Page 14: XML в крупных размерах - Михаил Крайнюк, DrupalJedi

XMLReader $reader = new XMLReader(); $reader->open('php://input', NULL, LIBXML_PARSEHUGE); while($reader->read()) { if ($reader->nodeType != XMLReader::ELEMENT) { continue; } $tag_name = $reader->localName; switch ($tag_name) { ... } }

Page 15: XML в крупных размерах - Михаил Крайнюк, DrupalJedi

XMLReader // Read file content. while($reader->read()) { ... case 'attachments': $reader->read(); if ($reader->nodeType == XMLReader::TEXT) { $file_content = trim($reader->value); } ... }

Page 16: XML в крупных размерах - Михаил Крайнюк, DrupalJedi

XML

Page 17: XML в крупных размерах - Михаил Крайнюк, DrupalJedi

XML

// Prepare node blank for data import. $node = new stdClass(); $node->type = 'article'; $node->language = language_default('language'); node_object_prepare($node);

Page 18: XML в крупных размерах - Михаил Крайнюк, DrupalJedi

XML

$node_original = node_load($doc_id); // Mark the new node as the existing node. Don't move fields. $node->nid = $node_original->nid; $node->vid = $node_original->vid; $node->data = $node_original->data; $node->language = $node_original->language; $node->created = $node_original->created;

Page 19: XML в крупных размерах - Михаил Крайнюк, DrupalJedi

Выводы ●  XML сложна – Feeds (гибкость, интерфейс, время, features) ●  XML проста и без файлов – SimpleXML (просто, удобно, застревает) ●  Есть файлы – XMLReader (импорт XML по 5 ГБ)

Page 20: XML в крупных размерах - Михаил Крайнюк, DrupalJedi

Михаил Крайнюк Drupal senior developer [email protected]

При поддержке:

Организаторы:

Спасибо!