使用数组值创建SimpleXML值字符串

时间:2013-10-16 09:10:13

标签: php simplexml

我想知道你是否有人可以帮助我解决我遇到的问题。我已经四处寻找,但似乎无法找到解决方案,所以我想在这里问:)

基本上我有一个包含我想要使用的field_id的数组,该值是另一个包含元素名称的数组,这些元素名称需要串在一起才能访问包含我想要检索的值的SimpleXML节点。

E.G。

    array (
        'route_id' => array('Services', 'Service', 'ServiceCode'),
        'agency_id' => array('Services', 'Service', 'RegisteredOperatorRef'),
        'route_short_name' => array('Services', 'Service', 'LineName'),
        'route_long_name' => '',
        'route_desc' => array('Services', 'Service', 'Description'),
        'route_type' => array('Services', 'Service', 'Mode'),
        'route_url' => '',
        'route_color' => '',
        'route_text_color' => '',
    );

正如您所见,id“route_id”包含在

$xmlobject->Services->Service->ServiceCode

依此类推。

现在,当我正在处理该特定区域时,我试图使用

破坏字段
implode('->', $fields)

这种方法似乎基本上没有工作并返回空,但我可以访问该值,我实际输入完全相同的路径。

我想知道是否有任何解决方案,或者我是否必须找到另一种写作方式?

非常感谢

安德鲁

1 个答案:

答案 0 :(得分:0)

->是一个运算符,因此,如果您真的想要将其构建为字符串并要求PHP解析它,则需要尝试eval()

但是你不必这样做,因为你可以通过某种循环链接到你的目的地:

function findText($entry,array $api,SimpleXMLElement $xml)
{
    if(!empty($api[$entry]))
    {
        $cache=$xml;
        foreach($api[$entry] as $node)
        {
            $cache=$cache->{$node};
        }
        return (String)$cache;
    }
    else
    {
        return null;
    }
}

Online demo包含以下数据:

XML:

<?xml version="1.0"?>
<root>
    <Services>
        <Service>
            <ServiceCode>Route ID</ServiceCode>
            <RegisteredOperatorRef>Agency ID</RegisteredOperatorRef>
            <LineName>Route Short Name</LineName>
            <Description>Route Description</Description>
            <Mode>Route Type</Mode>
        </Service>
    </Services>
</root>
$xml=simplexml_load_string(/* XML */);
$api=array (
    'route_id' => array('Services', 'Service', 'ServiceCode'),
    'agency_id' => array('Services', 'Service', 'RegisteredOperatorRef'),
    'route_short_name' => array('Services', 'Service', 'LineName'),
    'route_desc' => array('Services', 'Service', 'Description'),
    'route_type' => array('Services', 'Service', 'Mode')
);
echo findText("route_id",$api,$xml);

来自PHP 5.1及更高版本的Echos Route ID(尽管您可能希望在路径不正确或相似的情况下在循环中添加一些错误处理代码)。