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');
我得到以下警告每個長相:
- 的SimpleXMLElement :: __結構():命名空間的錯誤:沒有定義的故事命名空間前綴idPkg
- 的SimpleXMLElement :: __construct():u102.xml
- 的SimpleXMLElement :: __構建體():^在
一般的建議:學習如何使用DOM文檔,SimpleXML的只是無用的(和不那麼簡單) 。 –
我正在處理該選項。仍然希望將插入作爲上面的函數在最後一個節點之後發生。 – Justin
InDesign標記語言主要依賴於Adobe特定的名稱空間。當你從文件中實例化一個xml對象時,你會失去大部分額外的信息,比如命名空間和可能聲明的實體。然後,當您稍後嘗試使用前綴注入屬性時,您會收到錯誤,因爲編譯器甚至不知道該前綴來自哪裏。看看如何聲明和添加名稱空間給你的xml對象,由你決定。請注意,編寫文件可能會導致相同的問題。 – Loic