2017-03-07 6 views
1

사용하여 XML 문서에 자식 노드는추가 새로운 노드와이 웹 사이트의 사이트 맵을 보여줍니다 내 XML 문서의 샘플입니다 DOMDocument를

<?xml version="1.0" encoding="UTF-8"?> 
<project name="Esurance 365 Portal"> 
    <elements> 
     <element name="folderone" path="forms/folderone"> 
      <folder function="model">models</folder> 
      <folder function="controller">controllers</folder> 
      <folder function="view">views</folder> 
     </element> 
    </elements> 
</project> 

나는 한 그림 위에 다른 요소 노드를 추가 할 DOMDocument를 사용하고 싶습니다

<?xml version="1.0" encoding="UTF-8"?> 
    <project name="Esurance 365 Portal"> 
     <elements> 
      <element name="foldertwo" path="forms/foldertwo"> 
       <folder function="model">modelstwo</folder> 
       <folder function="controller">controllerstwo</folder> 
       <folder function="view">viewstwo</folder> 
      </element> 
      <element name="folderone" path="forms/folderone"> 
       <folder function="model">models</folder> 
       <folder function="controller">controllers</folder> 
       <folder function="view">views</folder> 
      </element> 
     </elements> 
    </project> 

을 다음 그러나 DOMDocument 문서에서 나는 심지어 새로운 요소를 얻을 수 얼마나 나를 보여주는 예제를 찾을 수가 캔트로 있도록 나타납니다.

createElementappendChild 메서드는 요소 노드를 삽입하는 방법을 보여 주지만 나머지 폴더 자식 노드를 삽입하는 방법은 표시하지 않습니다.

+0

결과를 참조하십시오. –

답변

1

element 태그를 선택하고 cloneNode()을 복사하십시오. setAttribute()을 사용하여 속성의 새 값을 설정하고 nodeValue을 사용하여 대상 태그에 새 텍스트를 설정합니다. 코드 끝에서 insertBefore()을 사용하여 기존 요소 앞에 새 요소를 삽입하십시오.

$dom = new DOMDocument(); 
$dom->loadXml($xml); 
// select "element" tag and copy it 
$element = $dom->getElementsByTagName("element")->item(0); 
$clone = $element->cloneNode(true); 
// change value of attribute 
$clone->setAttribute("name", "foldertwo"); 
$clone->setAttribute("path", "forms/foldertwo"); 
// select "folder" tag in new "element" tag change text of them 
$folder = $clone->getElementsByTagName("folder"); 
$folder->item(0)->nodeValue = "modelstwo"; 
$folder->item(1)->nodeValue = "controllerstwo"; 
$folder->item(2)->nodeValue = "viewstwo"; 
// insert new elements before existing element. 
$element->parentNode->insertBefore($clone, $element); 
$xml = $dom->saveXml(); 

는 다시에 appendChild를 호출 할 수에 새로운 DOM 노드/요소를 다시 얻을해야이 기능을 사용하여 demo

+0

그것은 트릭을 ;-)하지만 기존 노드를 복제 할 필요없이 노드를 직접 생성 할 수있는 노드를 얻고 싶었을 것입니다. –

+0

https://3v4l.org/60mXo 참조 – Mohammad