SImpleXML XPath从XML节点获取字符串值

时间:2013-03-07 21:32:17

标签: php xpath simplexml

我一直在尝试自己开发一个xml驱动的水平菜单作为私人项目..
但是因为我似乎被卡住了......大致...... XML文件(navigation.xml)

<navigation>
    <menu>
        <link>url</link>
        <tag>hover help text</tag>
        <text>Link text</text>
    </menu
</navigation>  

所以,我有一个变量来存储旧的链接/文本/标签名称,我想通过SimpleXML / XPath更新它..但它似乎不起作用..
PHP代码:

$load = SimpleXML_load_file('database/navigation.xml');
    foreach( $load->xpath("menu[@link=". $link ." and @tag=". $tag ." and @text=". $text ."]") as $item ) {
      $item->link = $link2; //link2->new link value, $link->old value
      $item->tag = $tag2; //tag2->new tag value, $tag->old value
      $item->text = $text2; //text2->new text value, $text->old value
    }
    $load->asXML('database/navigation.xml');  

有什么方法可以让它发挥作用吗?提前谢谢!

1 个答案:

答案 0 :(得分:1)

“@link”中的“@”符号用于引用元素的属性,而不是子元素。

foreach( $load->xpath("menu[link=". $link ." and tag=". $tag ." and text=". $text ."]") as $item ) {

您可能需要将语句包装在引号

foreach( $load->xpath(sprintf("menu[link=\"%s\" and tag=\"%s\" and text=\"%s\"]",$link,$tag,$text) as $item ) {