2013-03-22 6 views
1

누군가가 나를 미치게 만드는 데 도움이되기를 바랍니다.DOm 및 PHP를 사용하여 기존 XML 문서에 노드 추가

PHP를 사용하여 기존 XML 파일을 업데이트해야합니다. 노드 중 하나의 값이 무언가라면, 그 안에 텍스트가있는 새 하위 요소를 추가하고 싶습니다.

<properties> 
    <property> 
    <address> 
     <street>Example Road</street> 
     <locality>Fitzrovia</locality> 
     <town>London</town> 
     <postcode>NW1</postcode> 
    </address> 
    </property> 
    <property> 
    <address> 
     <street>Default Street</street> 
     <locality>Sample</locality> 
     <town>London</town> 
     <postcode>EC1</postcode> 
    </address> 
    </property> 
</properties> 

내가 지금 가지고있는 PHP가 :

내가 뭘하려고 오전
$dom = new DOMDocument(); 
$dom->load('http://example.com/example.xml'); 
$xpath = new DOMXPath($dom); 

$postcode = $xpath->query('property/address/postcode'); 
foreach($postcode as $region) 
{ 
    $r = $region->nodeValue; 
    if (preg_match('/^nw(?=[0-9]*)/i', $r)) { 
     $region->nodeValue = 'North West London'; 
    } 
    else if (preg_match('/^n(?=[0-9]*)/i', $r)) { 
     $region->nodeValue = 'North London'; 
    } 
    else if (preg_match('/^e(?=[0-9]*)/i', $r)) { 
     $region->nodeValue = 'East London'; 
    } 
    else if (preg_match('/^se(?=[0-9]*)/i', $r)) { 
     $region->nodeValue = 'South East London'; 
    } 
    else if (preg_match('/^sw(?=[0-9]*)/i', $r)) { 
     $region->nodeValue = 'South West London'; 
    } 
    else if (preg_match('/^w(?=[0-9]*)/i', $r)) { 
     $region->nodeValue = 'West London'; 
    } 
    else if (preg_match('/^ec(?=[0-9]*)/i', $r)) { 
     $region->nodeValue = 'East Central London'; 
    } 
    else if (preg_match('/^wc(?=[0-9]*)/i', $r)) { 
     $region->nodeValue = 'West Central London'; 
    } 
    else { 
     $region->nodeValue = 'Outer London'; 
    } 
} 

$dom->save('export.xml'); 

의 우편 번호가 특정에 해당되는 경우 여기

는 XML 파일의 예입니다 값을 입력하면 새로운 자식 노드가 텍스트와 함께 '주소'노드에 추가됩니다.

새로운 하위 노드를 생성 할 수있는 몇 가지 문제가 발생했지만 XML 파일의 한 부분에만 많은 요소가 추가 될 것입니다. 각 속성의 isntance와 반대되는 부분이 있습니다. 마디.

나는 이것이 도움이 될 수 있기를 바랍니다. 사전 :

답변

1

당신은 새로운 노드를 만들 DOMDocument::createElement을 사용해야하고 DOMNode::appendChild에서

덕분에 새로운 노드를 추가합니다.

예 : 응답 @akkie에 대한

if (preg_match('/^nw(?=[0-9]*)/i', $r)) { 
    $element = $dom->createElement('your_node_name', 'North West London'); 
    $region->parentNode->appendChild($element); 
} 
+0

감사합니다. 나는 그것을 시도해 왔지만 그것은 계속 잘못 나온다. 모든 새 노드는 모두 XML 파일에 함께 그룹화되며 '속성/속성/주소'노드마다 추가되지 않습니다. 내가 잘못 될 수있는 어떤 생각? – DL1984

+0

답변에 예제를 추가했습니다. – akkie

+0

감사합니다. @akkie. 나는 이것을 지금 시도 할 것이다. – DL1984