2013-09-07 2 views
1

이 오류 얻을 :전화는 PHP

Call to a member function addChild() on a non-object

을하지만 XML 파일은 다음과 같다 :

<?xml version="1.0" encoding="UTF-8"?> 
<urlset> 
<url> 
    <loc>http://mysite.com/</loc> 
    <changefreq>weekly</changefreq> 
    <priority>1.00</priority> 
</url> 
</urlset> 

그리고 나는이 일을 해요 :

//APPEND TO SITEMAP 
$file = '../sitemap.xml'; 
$xml = simplexml_load_file($file); 

$urlset = $xml->urlset; 

$urls = $urlset->addChild('url'); 
$urls->addAttribute("mongoID", $theAuthorUniqueMongoID); 
$urls->addChild('loc', 'http://mysite.com/author/'.$authorLink.'/'); 
$urls->addChild('changefreq', 'monthly'); 
$urls->addChild('priority', '0.80'); 

$xml->asXML($file); 

나는 기본적으로 그냥 내 사이트 맵에 몇 가지 물건을 추가하고있다. 나는 결코 XML에 능숙하지는 않았지만 나는이 것에 대해 내가 뭘 잘못하고 있는지 확신하지 못한다.

답변

4

이 변경해야합니다 :

$urlset = $xml->urlset; 
$urls = $urlset->addChild('url'); 

속으로 :

$urls = $xml->addChild("url"); 

그것은 당신이로드 된 XML의 루트 노드에 내용을 추가합니다. 따라서 스크립트를 한 번 실행하면 다음과 같은 결과가 출력됩니다.

<?xml version="1.0" encoding="UTF-8"?> 
<urlset> 
    <url> 
    <loc>http://mysite.com/</loc> 
    <changefreq>weekly</changefreq> 
    <priority>1.00</priority> 
    </url> 
    <url mongoID=""> 
    <loc>http://mysite.com/author//</loc> 
    <changefreq>monthly</changefreq> 
    <priority>0.80</priority> 
    </url> 
</urlset> 

읽기 쉽게 서식을 변경했습니다. 추가는 실제로는 단일 행입니다.

+0

오오오 !! 이것은 선생님, 나는 $ urlset = $ xml-> urlset;을 수행하여 부모 엘리먼트를 지정해야만한다. 나는 추측하지 않는다. 정말 고맙습니다!! – user2287474

+0

대단히 환영합니다. :) –

+0

일반적인 실수 : SimpleXML에는 "문서"라는 별도의 개념이 없으므로 예를 들어 DOM,'simplexml_load_file' **의 반환은 ** 루트 요소입니다 (귀하의 경우'urlset'). – IMSoP