php
  • xml
  • dom
  • 2016-08-09 6 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> 
    
    関連する問題