php
  • xml
  • dom
  • 2016-08-09 2 views 0 likes 
    0

    MasetrPage.xml 내부에 정의되지 않은 네임 스페이스 DOMDocumentFragment 포함 :PHP - 한 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 /> 
    

    지금 나는 MasterPage.xmlPAGE 태그 내부의 Page.xml 콘텐츠를 포함합니다.

    내 PHP 코드 :

    //[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')); 
    

    그러나 여기에 내가 네임 스페이스가 Page.xml 내에 정의되지 않는다는 오류가 발생합니다. 그러나 내 프로젝트의 경우 내부에 네임 스페이스를 정의하고 싶지 않습니다. Page.xml

    답변

    0

    조각 문자열 내에 네임 스페이스를 정의하지 않으면 유효한 XML이 아닙니다. 네임 스페이스 접두사는 교환 가능하고 선택적입니다. 접두어는 네임 스페이스를 정의하지 않으며 xmlns * --attributes는 정의합니다.

    다음 3 예는 모두 동일한 공간 및 로컬 노드 이름 분석 :

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

    로컬 이름 요소 노드의 모든 결과 foo 및 네임 스페이스 urn:foo-ns. 노드 이름을 {urn:foo-ns}foo으로 읽을 수 있습니다.

    그러나 사용자를위한 XML 입력을 쉽게하기 위해 네임 스페이스에 대한 접두사를 정의 할 수 있습니다. 입력을 받아 네임 스페이스를 정의하는 태그에 넣습니다. 그런 다음 조각으로 파싱하고 자식 노드를 복사 할 수 있습니다.

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

    출력 :

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