2017-01-26 9 views
0

Я пытаюсь добавить новый узел после в designmap.xmlОшибки SimpleXMLElement. Попытка добавить XML после определенного момента

Новый узел включает атрибут src, который настраивается массивом ниже.

$newStories = Array ([0] => u102 [1] => u103 [2] => u107 [3] => u156 ); 

$designMap = simplexml_load_file('designmap.xml'); 

foreach ($newStories as $story) { 
    $newStoryNode = '<idPkg:Story src="Stories/Story_' . $story . '.xml" />'; 
    $insert = new SimpleXMLElement($newStoryNode); 
    $target = current($designMap->xpath('//idPkg:Story[last()]')); 

    simplexml_insert_after($insert, $target); 
} 

function simplexml_insert_after(SimpleXMLElement $insert, SimpleXMLElement $target) 
{ 
    $target_dom = dom_import_simplexml($target); 
    $insert_dom = $target_dom->ownerDocument->importNode(dom_import_simplexml($insert), true); 
    if ($target_dom->nextSibling) { 
     return $target_dom->parentNode->insertBefore($insert_dom, $target_dom->nextSibling); 
    } else { 
     return $target_dom->parentNode->appendChild($insert_dom); 
    } 
} 

$designMap->asXML('designmap.xml'); 

Я получаю следующее ПРЕДУПРЕЖДЕНИЙ для каждого из внешности:

  1. SimpleXMLElement :: __ конструкт(): пространство имен ошибка: Префикс пространства имен idPkg на Story не определен
  2. SimpleXMLElement :: __construct(): u102.xml
  3. SimpleXMLElement :: __ конструкт():^в
+0

Общий совет: научиться использовать DOMDocument, SimpleXML просто бесполезно (и не так просто) , –

+0

Я сейчас работаю над этим вариантом. Тем не менее вы хотите настроить таргетинг на вставку после последнего узла, как это делает вышеприведенная функция. – Justin

+1

Язык разметки InDesign в основном зависит от конкретных пространств имен adobe. Когда вы создаете экземпляр объекта xml из файла, вы теряете большую часть дополнительной информации, такой как пространства имен и, возможно, объявленные объекты. Затем, когда вы позже попытаетесь ввести атрибуты с префиксом, вы получите ошибку, потому что компилятор даже не знает, откуда этот префикс. Вам решать, как объявлять и добавлять пространства имен к вашему объекту xml. Имейте в виду, что запись файла может привести к тем же проблемам. – Loic

ответ

0

$xpath->query("//idPkg:Story[last()]")

Не уверен, что вы должны принять первое заявление «// idPkg: история»

 Смежные вопросы

  • Нет связанных вопросов^_^