2016-08-09 10 views
0

MasetrPage.xml:PHP - Fügen Sie DOMDocumentFragment mit undefinierten Namespaces innerhalb eines DOMDocument

<?xml version="1.0" encoding="UTF-8"?> 
<PAGE 
xmlns:PHOENIX = 'PHOENIX' 
xmlns:PHOENIX.CORE = 'PHOENIX/CORE' 
xmlns:PHOENIX.CORE.PAGE = 'PHOENIX/CORE/PAGE' 
xmlns:PHOENIX.CORE.COMPILER = 'PHOENIX/CORE/COMPILER' 
> 
</PAGE> 

Page.xml:

<PHEONIX.CORE:EXAMPLE.ELEMENT /> 
<PHEONIX.CORE:EXAMPLE.ELEMENT2 /> 

Jetzt will ich in der MasterPage.xmlPAGE Tag den Page.xml Inhalt enthalten.

Mein PHP-Code:

//[i] Initialize new \DOMDocument from from PageMaster.xml. 
$pageDocument = \DOMDocument::load('PageMaster.xml'); 

//[i] Create fragment from pageDocument and append content from page XML. 
$pageDocument_frag = $pageDocument->createDocumentFragment(); 
$pageDocument_frag->appendXML(file_get_contents('Page.xml')); 

Aber hier bekomme ich einen Fehler, dass die Namensräume nicht innerhalb der Page.xml definiert sind. Aber für mein Projekt möchte ich nicht die Namespaces innerhalb der Page.xml

Antwort

0

definieren Wenn Sie die Namespaces innerhalb der Fragment-Zeichenfolge nicht definieren, dann ist es nicht gültig XML. Namespacepräfixe sind sowohl austauschbar als auch optional. Die Präfixe definieren den Namespace nicht, das tun die xmlns * -Attribute.

  • <f:foo xmlns:f="urn:foo-ns"/>
  • <foo:foo xmlns:foo="urn:foo-ns"/>
  • <foo xmlns="urn:foo-ns"/>

Alles Ergebnis in einem Elementknoten mit dem lokalen Namen:

Die folgenden 3 Beispiele alle auf den gleichen Namensraum und die lokalen Knotennamen parsen foo und der Namespace urn:foo-ns. Sie können den Knotennamen als {urn:foo-ns}foo lesen.

Um die XML-Eingabe für Benutzer einfacher zu machen, können Sie jedoch einen Satz Präfixe für Ihre Namespaces definieren. Sie nehmen die Eingabe und wickeln sie in ein Tag ein, das den Namespace definiert. Danach können Sie es als Fragment analysieren und die Childnodes kopieren.

$xhtml = <<<'XHTML' 
    <div> 
    <p>Some Content.</p> 
    </div> 
XHTML; 

$document = new DOMDocument(); 
$import = $document->createDocumentFragment(); 
$import->appendXml(
    '<section xmlns="http://www.w3.org/1999/xhtml">'.$xhtml.'</section>' 
); 
$fragment = $document->createDocumentFragment(); 
foreach ($import->childNodes->item(0)->childNodes as $node) { 
    $fragment->appendChild($node->cloneNode(TRUE)); 
} 

$document->formatOutput = TRUE; 
echo $document->saveXml($fragment); 

Ausgang:

<div xmlns="http://www.w3.org/1999/xhtml"> 
    <p>Some Content.</p> 
</div>