2011-11-05 4 views
0

DOMDocument의 사용과 XML 생성에 관한 질문이 있습니다.PHP와 DOMDocument

는 내가 PHP 프로그램이 그 XML의 XML 파일

  • 프로세스의 각 노드 (행)에

    1. 로드; 다음 클라이언트에 반환 새로운 결과 XML 트리에
    2. 은 내가 만들 (추가) 할 수 있도록 노드의 문자열 표현을 얻을 XML 요소를 반환 다른 프로세스에 오프로 전송

    내가 가진 문제는 XML이 클라이언트에게 마지막 닥터를 다시 돌려 보내기 전까지는 괜찮아 보입니다. saveXML()을 사용하고 결과 파일에 & lt & gt 등이 있습니다. [save()] 파일을 저장하려고 할 때도 결과가 나타납니다. 이것에 대해 몇 시간 동안 PHP 보드를 검색하고 있습니다. 그때 jQuery를 통해 HTML을 생성 할 수 있도록

    <?php 
    
    header('Content-type: text/xml'); 
    
    // **** Load XML **** 
    $xml = simplexml_load_file('Test1.xml');  
    
    // Instantiate class; work with single instance 
    $myAddress = new myAddressClass;   
    
    $domDoc = new DOMDocument('1.0', 'UTF-8'); 
    $domDoc->formatOutput = true; 
    $rootElt = $domDoc->createElement('root'); 
    $rootNode = $domDoc->appendChild($rootElt); 
    
    //Go through each row of XML and process each address 
    foreach($xml->Row as $row) 
    { 
        //fire off function against instance 
    
        // returns SimpleXMLElement 
        $resultXMLNode = $myAddress->buildRequest() ;  
    
        // need XML representation of node 
        $subNode = $addressXML->asXML();     
    
        // strip out extraneous XML def 
        $cleanSubNode = str_replace('<?xml version="1.0"?>', '', $subNode);  
    
        // create new node 
        $subElt = $domDoc->createElement('MyResponse', $cleanSubNode);    
    
        //append subElmt node 
        $rootNode->appendChild($subElt);           
    
    } 
    // need full XML doc properly formatted/valid 
    $domDoc->saveXML();    
    
    ?> 
    

    가 BTW, 내가 클라이언트로 XML을 반환하고 있습니다 :

    여기 내 코드입니다.

    도움을 주시면 감사하겠습니다. 누군가가이 일을 잠재적으로보다 효율적인 방법을 제공 할 수있는 경우

    또한, 그것은 너무 큰 것 :

    감사합니다.

  • +0

    PHP에서 XML을 처리하기 위해 원하는 라이브러리를 확인하십시오. 동시에 SimpleXML과 PHPDOM을 사용하고 있으며, 서로 잘 작동한다고 생각하지 않습니다. – timdream

    +0

    내 초기 simplexml_load_file()을 언급하고 있습니까? 그렇다면 이것이 단지 드라이버 파일이므로 내 최종 출력물에 영향을 미치는지 확신 할 수 없습니다. 귀하의 의견에 감사드립니다. – Rob

    +0

    줄 $ subNode = $ addressXML-> asXML()을 변경했습니다. 동일한 결과와 함께 saveXML()을 사용하려면 : ( – Rob

    답변

    5

    당신이 다음에 추가 할 수있는 document fragment 만들고, 다른 요소에 (문자열로) XML을 추가하려면 :

    // create new node 
    $subElt = $domDoc->createElement('MyResponse'); 
    
    // create new fragment 
    $fragment = $domDoc->createDocumentFragment(); 
    $fragment->appendXML($cleanSubNode); 
    $subElt->appendChild($fragment); 
    

    이있는 DOMDocument 요소로 원시 XML로 변환됩니다, 그것을 만들고있다 DOMDocumentFragment::appendXML 기능을 사용하십시오.

    편집 :

    // create subelement 
    $subElt = $domDoc->createElement('MyResponse'); 
    
    // import simplexml document 
    $subElt->appendChild($domDoc->importNode(dom_import_simplexml($resultXMLNode), true)); 
    
    // We insert the new element as root (child of the document) 
    $domDoc->appendChild($subElt); 
    

    필요가 없습니다가로 응답을 변환 : 또는 사용에-경우 (의견을 들으), 당신은 직접 DOMDocument를에 SimpleXML을 객체와 import 사용할 수 있습니다 문자열을 사용하고 더 이상이 작업을 수행하지 않아도됩니다.

    +1

    또는 노드를 가져 와서 노드를 가져오고 – Gordon

    +1

    을 추가하십시오. 그가 importnode를 참조하고 있다고 생각합니다. http://php.net/manual/en/domdocument.importnode.php – CD001

    +0

    대답은 지금도 좋은데 그 점은 정말 알아두면 좋다. – hakre