我有一大堆字符串,如下所示:
$xml->archdesc->accessrestrict->p
这些字符串表示XML文档中的可能项。 “$ xml”是我使用simplexml_load_file()读取XML文件时创建的对象(SimpleXMLElement)的简写。
我怎样才能将这些解释为变量?我想访问文档中存在的每个字符串的值,但我似乎无法实现这一点。我尝试过使用$$格式,$ {}格式,eval()等等,但似乎没有给我变量的内容;他们只是将我的字符串显示为字符串。
这些不适用于使用对象运算符的东西吗?我是否必须以某种方式逃避这些?我缺少什么?
答案 0 :(得分:2)
您可以将阵列更改为xpath
位置吗?
$xml = new SimpleXMLElement("<?xml version=\"1.0\" encoding=\"utf-8\" ?><root><foo><bar>foobar</bar></foo><baz><boo>bazboo</boo></baz></root>");
$array = array('foo/bar', 'baz/boo');
foreach ($array as $xpath) {
$xpathResult = $xml->xpath($xpath);
echo $xpathResult[0]."\n";
}
虽然我绝对更喜欢上述解决方案,但您可以保留现有数组并使用eval()
(并阅读When is eval evil in php?)
$xml = new SimpleXMLElement("<?xml version=\"1.0\" encoding=\"utf-8\" ?><root><foo><bar>foobar</bar></foo><baz><boo>bazboo</boo></baz></root>");
$array = array('$xml->foo->bar', '$xml->baz->boo');
foreach ($array as $xpath) {
echo eval("return $xpath;");
}
答案 1 :(得分:0)
eval适合我。
测试代码:
$blah = new stdClass();
$blah->hello = 'hello';
$foo = '$blah->hello';
eval('echo '.$foo.';');
答案 2 :(得分:0)
你也可以使用变量来实现这一点:
$blah = new stdClass();
$blah->hello = 'hello';
$foo = 'blah->hello';
$bar = explode('->', $foo);
echo $$bar[0]->$bar[1];
请注意,您必须先剪掉字符串的美元符号才能以这种方式使用它。
答案 3 :(得分:0)
不需要其他答案所建议的eval
。只需执行以下操作:
<?
$x = 'hello';
$y = new StdClass;
$z = 'y';
$y->hello = 'wes';
print $y->$x;
print $z->$x;
?>
答案 4 :(得分:0)
解决了 - 我自己的愚蠢错误;我在另一个位置重置$ xml var,从而否定了我对SimpleXML对象的使用,加上我的eval()语法有点偏。愚蠢的错误,与我的问题完全无关。对不起。