SImpleXML XPath从XML节点获取字符串值
问题描述:
我一直试图开发一个自己作为私人项目的xml驱动水平菜单。但是,因为看起来我一直被卡住..粗略地。 。
XML文件(navigation.xml)SImpleXML XPath从XML节点获取字符串值
<navigation>
<menu>
<link>url</link>
<tag>hover help text</tag>
<text>Link text</text>
</menu
</navigation>
所以,我有一个变量storring旧的链接/文本/标签的名字,我想通过的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');
有什么办法可以让它工作吗?提前致谢!
答
“@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) {
感谢第一通讯!我做了你写的东西,但它只是回到管理页面(如果sscript正确结束,我已经放了标题),但是链接/标记/文本没有更新,如果我改变它的值..任何想法? – Pr1nceJ4x 2013-03-07 21:41:04
你所说的超出了原始问题的范围,我建议在你的“foreach”循环之前和之后查看你的对象,看看它是否被更新,另一种可能是你需要引用你的xpath变量(请参阅我的编辑) – Scuzzy 2013-03-07 22:44:17
好吧,我会在我回家时尝试它。关于编辑的一个问题:在引号前使用反斜杠的原因是什么? – Pr1nceJ4x 2013-03-08 10:42:57