如果节点名称都确定了,直接用windows 的替换可以吗?
或者用正则表达式来做也可以啊

解决方案 »

  1.   

    $str = '<?xml version="1.0" encoding="GB2312"?>
    <organization>
    <orgUnit id="1" name="&#202;&#208;1&#190;&#214;"/>
    <orgUnit id="2" name="&#202;&#208;1&#190;&#214;·&#214;&#190;&#214;" upid="1"/>
    <orgUnit id="3" name="&#202;&#208;1&#190;&#214;·&#214;&#190;&#214;&#181;&#196;·&#214;&#190;&#214;" upid="2"/>
    <orgUnit id="4" name="&#202;&#208;2&#190;&#214;"/>
    <orgUnit id="5" name="&#202;&#208;2&#190;&#214;·&#214;&#190;&#214;" upid="3"/>
    </organization>
    ';$id = array();
    $name = array();
    $upid = array();
    $tree = array();if (preg_match_all("/<orgUnit id=\"([0-9]+)\" name=\"(.+)\"( upid=\"([0-9]+)\"){0,1}\/>/isU", $str, $matches)) {
    $id = $matches[1];
    $name = $matches[2];
    $upid = $matches[4]; foreach ($id as $key => $val) {
    $parentId = ($upid[$key]) ? $upid[$key]: 0;
    $tree[$val] = array(
    'id' => $val,
    'parentId' => $parentId,
    'name' => $name[$key]
    );
    } print_r($tree);}$tree就是你要的结果树了