0

我有一个 XML 文件:-

<products>
   <product_id value="1">
       <tab_id value="251">
            <dist_region value="5" />
            <dist_region value="10066" />
            <dist_region value="10069" />
       </tab_id>
   </product_id>
</products>

我正在使用这个 xpath:-

list($prid) = $product->xpath("//dist_region[@value]/@value");
    $prid=(string)$prid;
    if(strlen(trim($prid))==0)
    {
        echo ' Is not Match In Product';
        exit;
    }
    echo $prid;

并获得输出:-

5

我想像这样输出:- 所有 dist_region 像:-

5,10066,10069

我怎么能得到这个?

4

2 回答 2

3

你必须遍历你的结果:

$result = $product->xpath('//dist_region[@value]/@value');
$result_arr = array();

if(!empty($result)) { 
    foreach($result as $prid) {
        $prid = (string) $prid;
        if(strlen(trim($prid)) > 0) {
            $result_arr[] = $prid;
        }
    }
}

echo implode(',', $result_arr);
于 2013-05-20T09:33:59.710 回答
2

根据您接受的答案,您似乎正在寻找所有非空value属性。但与回答的不同,您实际上可以通过以不同方式制定 xpath 表达式来节省循环:

$expression = '//dist_region/@value[normalize-space(.)]';
$values     = $product->xpath($expression);

echo implode(',', $values);

该 xpath 表达式意味着:查询具有非空(非零长度)标准化字符串值value的任何 -element-nodes 的所有 -attribute-nodes (这与PHP中的类似,并且如果您需要修剪,则非常适合此处)。dist_regiontrim()

如本例所示,实际上不需要循环遍历结果,在 SimpleXML 中,您可以从 xpath 查询中以数组形式返回属性节点,并在字符串上下文中轻松使用它们(将它们转换为字符串),例如通过使用implode()功能

于 2013-05-21T09:06:23.700 回答