【问题标题】:SImpleXML XPath getting a string value from an XML nodeSIMpleXML XPath 从 XML 节点获取字符串值
【发布时间】:2013-03-07 21:32:16
【问题描述】:

我一直在尝试自己开发一个 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');  

有什么办法可以让它工作吗?提前致谢!

【问题讨论】:

    标签: php xpath simplexml


    【解决方案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 ) {
    

    【讨论】:

    • 感谢第一次交流!我做了你写的,但它只是回到管理页面(如果脚本正确完成,我已经放了标题),但是如果我改变它的值,链接/标签/文本不会更新..有什么想法吗?跨度>
    • 您所说的超出了原始问题的范围,我建议您在“foreach”循环之前和之后查看您的对象以查看它是否正在更新,另一种可能性是你需要在你的 xpath 变量周围加上引号(见我的编辑)
    • 好的,我回家后试试看。关于您的编辑的一个问题:引号前使用反斜杠的原因是什么?
    • 我已经检查了所有内容,但似乎没有任何效果。双引号解决方案没有给出任何不同,而且我似乎无法检查结果。文件得到更新(Notepad++ 要求我重新打开文件),但值没有改变。我也无法查看数组的值(它喜欢: Array () ).. 有什么我能做的吗?
    • @Pr1nceJ4x 如果你用双引号开始一个字符串并且想在字符串中使用双引号,你必须将它们转义。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-01
    • 1970-01-01
    • 2015-02-20
    • 1970-01-01
    相关资源
    最近更新 更多