XML в крупных размерах
Михаил Крайнюк
Михаил Крайнюк
Drupal senior developer
Мой опыт в Drupal разработке
●  Разработка
●  Управление проектами
●  Drupal аудит
●  Консультация
●  Локализация Drupal
●  Разработка Drupal модулей
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>
Feeds
Feeds
XML
This XML is… Simple!
SimpleXML
$up_file = file_get_contents('php://input');
$ref = new SimpleXMLElement($up_file);
$result = $ref->xpath('/ord/regNumber');
$string = (string) $result[0];
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' => '',
);
Happy
Oops
SimpleXML
SimpleXML
XML stream
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) {
...
}
}
XMLReader
// Read file content.
while($reader->read()) {
...
case 'attachments':
$reader->read();
if ($reader->nodeType == XMLReader::TEXT) {
$file_content = trim($reader->value);
}
...
}
XML
XML
// Prepare node blank for data import.
$node = new stdClass();
$node->type = 'article';
$node->language = language_default('language');
node_object_prepare($node);
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;
Выводы
●  XML сложна – Feeds
(гибкость, интерфейс, время, features)
●  XML проста и без файлов – SimpleXML
(просто, удобно, застревает)
●  Есть файлы – XMLReader
(импорт XML по 5 ГБ)
Михаил Крайнюк
Drupal senior developer
kraynuk.m@i20.biz
При поддержке:
Организаторы:
Спасибо!

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

  • 1.
    XML в крупныхразмерах Михаил Крайнюк
  • 2.
    Михаил Крайнюк Drupal seniordeveloper Мой опыт в Drupal разработке ●  Разработка ●  Управление проектами ●  Drupal аудит ●  Консультация ●  Локализация Drupal ●  Разработка Drupal модулей
  • 3.
    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>
  • 4.
  • 5.
  • 6.
  • 7.
    SimpleXML $up_file = file_get_contents('php://input'); $ref= new SimpleXMLElement($up_file); $result = $ref->xpath('/ord/regNumber'); $string = (string) $result[0];
  • 8.
    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' => '', );
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
    XMLReader $reader = newXMLReader(); $reader->open('php://input', NULL, LIBXML_PARSEHUGE); while($reader->read()) { if ($reader->nodeType != XMLReader::ELEMENT) { continue; } $tag_name = $reader->localName; switch ($tag_name) { ... } }
  • 15.
    XMLReader // Read filecontent. while($reader->read()) { ... case 'attachments': $reader->read(); if ($reader->nodeType == XMLReader::TEXT) { $file_content = trim($reader->value); } ... }
  • 16.
  • 17.
    XML // Prepare nodeblank for data import. $node = new stdClass(); $node->type = 'article'; $node->language = language_default('language'); node_object_prepare($node);
  • 18.
    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;
  • 19.
    Выводы ●  XML сложна– Feeds (гибкость, интерфейс, время, features) ●  XML проста и без файлов – SimpleXML (просто, удобно, застревает) ●  Есть файлы – XMLReader (импорт XML по 5 ГБ)
  • 20.
    Михаил Крайнюк Drupal seniordeveloper kraynuk.m@i20.biz При поддержке: Организаторы: Спасибо!