2017-01-26 82 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
  2. 的SimpleXMLElement :: __construct():u102.xml
  3. 的SimpleXMLElement :: __構建體():^在
+0

一般的建議:學習如何使用DOM文檔,SimpleXML的只是無用的(和不那麼簡單) 。 –

+0

我正在處理該選項。仍然希望將插入作爲上面的函數在最後一個節點之後發生。 – Justin

+1

InDesign標記語言主要依賴於Adobe特定的名稱空間。當你從文件中實例化一個xml對象時,你會失去大部分額外的信息,比如命名空間和可能聲明的實體。然後,當您稍後嘗試使用前綴注入屬性時,您會收到錯誤,因爲編譯器甚至不知道該前綴來自哪裏。看看如何聲明和添加名稱空間給你的xml對象,由你決定。請注意,編寫文件可能會導致相同的問題。 – Loic

回答

0

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

不知道你需要接受的第一條語句「// idPkg:故事」