2017-01-26 3 views
0

Ich versuche, einen neuen Knoten nach in designmap.xmlSimpleXMLElement-Fehler. Versuchen, XML nach bestimmten Punkt hinzufügen

hinzufügen Der neue Knoten enthält ein Src-Attribut, das durch das Array unten angepasst wird.

$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'); 

erhalte ich die folgende Warnungen für jede der Blicke:

  1. SimpleXMLElement :: __ construct(): namespace Fehler: Namespacepräfix idPkg auf Geschichte ist nicht definiert
  2. SimpleXMLElement :: __construct(): u102.xml
  3. SimpleXMLElement :: __ construct():^in
+0

Eine allgemeine Beratung: lernen, wie DOMDocument zu verwenden, SimpleXML ist nur nutzlos (und nicht so einfach) . –

+0

Ich arbeite gerade an dieser Option. Immer noch darauf achten, dass die Einfügung nach dem letzten Knoten erfolgt, wie es die obige Funktion tut. – Justin

+1

Die InDesign-Markup-Sprache verwendet meist Adobe-spezifische Namespaces. Wenn Sie ein XML-Objekt aus der Datei instanziieren, verlieren Sie die meisten zusätzlichen Informationen wie Namespaces und möglicherweise deklarierte Entitäten. Wenn Sie später versuchen, Attribute mit einem Präfix zu versehen, erhalten Sie einen Fehler, weil der Compiler nicht einmal weiß, woher das Präfix kommt. Es liegt an Ihnen zu sehen, wie Sie Namespaces zu Ihrem XML-Objekt deklarieren und hinzufügen. Beachten Sie, dass das Schreiben der Datei zu den gleichen Problemen führen kann. – Loic

Antwort

0

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

Nicht sicher müssen Sie die erste Aussage umarmen "// idPkg: Story"

Verwandte Themen