PHP SimpleXML路径存储在变量中

时间:2011-07-26 01:42:14

标签: php simplexml

我尝试使用simpleXML创建一个插入子元素的函数,我有这个函数:

function editSitemap ( $map, $path, $node, $value = NULL, $namespace = NULL, $DOM = NULL ) {
    $xml = $this->Sitemaps[$map]['content']; 
    if ( $namespace != NULL && $DOM == TRUE ) {
        $sd = dom_import_simplexml($cur);
        $newNode = $sd->ownerDocument->createElement($node . ':' . $namespace, $value);
        $newNode = $sd->appendChild($newNode);
    } elseif ( $path == NULL ) {
        $xml->addChild( $node , $value, $namespace );
    } else {
        $xml->$path->addChild( $node , $value, $namespace );
    }
    $this->Sitemaps[$map]['content']->asXML($this->Sitemaps[$map]['path']);
}

所以在这里我需要$ xml-> $ path如下:$ xml-> url [2]当simpleXML在我调用时使用它:editSitemap('compare','url [1]', 'loc','http://truefoodlooks.com/usercp.php',NULL);

或者我需要$ xml-> $ path如下所示:$ xml-> url [2] - >当我调用simpleXML时使用它:editSitemap('compare','url [1] - > loc','name','user cp',NULL);

任何想法如何做到这一点?

由于 纳特


@PaulPRO得到了它:

function editSitemap ( $map, $path, $node, $value = NULL, $namespace = NULL, $DOM = NULL ) {
    $xml = $this->Sitemaps[$map]['content'];
    if ( $path != '' ){
        eval('$cur = $xml->'.$path.';');
    } else {
        $cur = $xml;
    }
    if ( $namespace != NULL && $DOM == TRUE ) {
        $sd = dom_import_simplexml($cur);
        $newNode = $sd->ownerDocument->createElement($node . ':' . $namespace, $value);
        $newNode = $sd->appendChild($newNode);
    } else {
        $cur->addChild( $node , $value, $namespace );
    }
    $this->Sitemaps[$map]['content']->asXML($this->Sitemaps[$map]['path']);
}

1 个答案:

答案 0 :(得分:1)

修改

我之前使用{$path}的解决方案不起作用。事实上,我认为如果不使用eval ......这是不可能的:(这是eval的解决方案:

function editSitemap ( $map, $path, $node, $value = NULL, $namespace = NULL, $DOM = NULL ) {
    $xml = $this->Sitemaps[$map]['content']; 
    if ( $namespace != NULL && $DOM == TRUE ) {
        $sd = dom_import_simplexml($cur);
        $newNode = $sd->ownerDocument->createElement($node . ':' . $namespace, $value);
        $newNode = $sd->appendChild($newNode);
    } elseif ( $path == NULL ) {
        $xml->addChild( $node , $value, $namespace );
    } else {
        eval('$xml->'.$path.'->addChild( $node , $value, $namespace);');
    }
    $this->Sitemaps[$map]['content']->asXML($this->Sitemaps[$map]['path']);
}