PHP SimpleXML 路径存储在变量中

发布于 2024-11-26 10:50:17 字数 1977 浏览 0 评论 0原文

我试图创建一个函数,当我用 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]->loc 当 simpleXML 在我调用时使用它: editSitemap( 'compare', 'url[1]->loc ) loc', '名称', '用户 cp', NULL );

有什么想法如何做到这一点?

谢谢 Nat


@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']);
}

im trying to make a function that will insert a child element when i tell it with simpleXML i have this function:

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']);
}

so in this i need $xml->$path to be like this: $xml->url[2] when simpleXML uses it when i call: editSitemap( 'compare', 'url[1]', 'loc', 'http://truefoodlooks.com/usercp.php', NULL );

or i need $xml->$path to be like this: $xml->url[2]->loc when simpleXML uses it when i call: editSitemap( 'compare', 'url[1]->loc', 'name', 'user cp', NULL );

Any ideas how to do this?

Thanks
Nat


@PaulPRO got it:

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']);
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

巴黎盛开的樱花 2024-12-03 10:50:17

编辑

我之前使用 {$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']);
}

Edit

My previous solution with {$path} doesn't work. In fact I think this is impossible without using eval... :( Here is a solution with 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']);
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文