我有这样一个XML:<?xml version="1.0"?>
<employees>
 <employee>
  <name>张三</name>
  <position>经理</position>
 </employee>
 <employee>
  <name>李四</name>
  <position>助理</position>
 </employee>
 <employee>
  <name>李四</name>
  <position>助理</position>
 </employee>
 <employee>
  <name>王五</name>
  <position>讲师</position>
 </employee>
</employees>
需要一个PHP对这个XML进行处理后,生成一个新的XML。要求是: 对<name></name>里的字符串,
 都要进行调用 fanyi($str)这个函数,并用返回值 替换 原值。但另外两点:
如果这个函数的返回值为 1 ,那么就需要将它的<position>里的值变成 1.
如果这个函数的返回值为 0 ,那么就需要将它去掉。
例如,如果fanyi('张三')返回:zhangsan;   fanyi('李四')返回:1; fanyi('王五')返回:0。那么经过这个PHP函数后,生成的新XML为:
<?xml version="1.0"?>
 <employees>
  <employee>
   <name>zhangsan</name>
   <position>经理</position>
  </employee>
  <employee>
   <name>1</name>
   <position>1</position>
  </employee>
</employees>
求这个PHP函数

解决方案 »

  1.   


    <?php
    $xml_str = '<?xml version="1.0"?>
    <employees>
     <employee>
      <name>张三</name>
      <position>经理</position>
     </employee>
     <employee>
      <name>李四</name>
      <position>助理</position>
     </employee>
     <employee>
      <name>王五</name>
      <position>讲师</position>
     </employee>
    </employees>
    ';
    $xml = simplexml_load_string($xml_str);
    $count = count($xml->employee);
    for($i = 0;$i < $count;$i++) {
    $node = $xml->employee[$i];
    $name_fanyi = fanyi($node->name);
    if ($name_fanyi === 1) {
    $node->name = $node->position = 1;
    } elseif ($name_fanyi === 0) {
    unset($xml->employee[$i]);
    } else {
    $node->name = $name_fanyi;
    }
    }
    print_r($xml);
    function fanyi($name)
    {
    switch ($name) {
    case '张三':
    return 'zhangsan';
    break;
    case '李四':
    return 1;
    break;
    case '王五':
    default:
    return 0;
    break;
    }
    }?>
      

  2.   

    数组是给你看效果的!

    print_r($xml);
    换成
    echo $xml->asXML();
    就可以输出xml了