PHP对XML文件操作

来源:互联网 发布:欧洲旅游攻略知乎 编辑:程序博客网 时间:2024/04/27 15:12
/** * 新建b级元素,其中b元素中包含三个c级元素 * * @param unknown $c1           * @param unknown $c2           * @param unknown $c3           * @return boolean */function writeNewB($c1, $c2, $c3){    // 这里是DOMDocument读取xml    $dom = new DOMDocument ( '1.0' );    $dom->load ( 'a.xml' );    // 最外层元素    $a = $dom->getElementsByTagName ( 'a' );    // 第一层的元素数组,即a[0]    $a = $a->item ( 0 );    // 新建一个元素,名为b    $_b = $dom->createElement ( 'b' );    // 往a[0]写入b    $a->appendChild ( $_b );    // 新建一个元素,名为c1    $_c1 = $dom->createElement ( 'c1' );    // 往b[0]写入c1    $_b->appendChild ( $_c1 );    // 新建一个文本节点    $_text = $dom->createTextNode ( $c1 );    // 往c1写入文本节点    $_c1->appendChild ( $_text );    // 同上步骤,添加三个c级元素    // c2    $_c2 = $dom->createElement ( 'c2' );    $_b->appendChild ( $_c2 );    $_text = $dom->createTextNode ( $c2 );    $_c2->appendChild ( $_text );    // c3    $_c3 = $dom->createElement ( 'c3' );    $_b->appendChild ( $_c3 );    $_text = $dom->createTextNode ( $c3 );    $_c3->appendChild ( $_text );    // 保存xml    $dom->save ( 'a.xml' );    return true;}/** * 通过c1的值遍历得b元素数组 * * @param unknown $c1           * @return b元素数组:unknown */function getBByC1($c1){    // 这里是simplexml_load_file读取xml    $xml = simplexml_load_file ( 'a.xml' );    $r_arr_b = array ();    // load后,xml为a元素数组    // xml->b为,b元素数组    foreach ( $xml->b as $b )    {        // 假如我们要b元素的c1大于基准        if ($c1 < $b->c1)        {            $r_arr_b [] = $b;        }    }    return $r_arr_b;}/** * 通过c2来遍历删除b元素,这里只删除前面一个,逻辑看需求 * * @param unknown $c2           * @return boolean */function deleteBByC2($c2){    // 这里是DOMDocument读取xml    $dom = new DOMDocument ( '1.0' );    $dom->load ( 'a.xml' );    // 返回最外层关于'a'节点数    $_a = $dom->getElementsByTagName ( 'a' );    // 第一层的对象数组的第一个对象信息,即a[0]    $_a = $_a->item ( 0 );    // 下面是往xml删除节点    // 返回第二层关于'b'节点数    $_b = $_a->getElementsByTagName ( 'b' );    // 地二层对象数组,即b[]    foreach ( $_b as $b )    {        $_c2 = $b->getElementsByTagName ( 'c2' );        // 第三层对象数组,即id[]        foreach ( $_c2 as $c )        {            if ($c2 == $c->nodeValue)            {                // parentNode为夫节点,即b[X]                $parentNode = $c->parentNode;                // 从最外层的a移除b[x]节点                $_a->removeChild ( $parentNode );                // 保存xml                $dom->save ( 'a.xml' );                return true;            }        }    }    return false;}/** * 通过c2修改b元素的c3元素 */function updateC3ByC2($c2, $c3){    // 这里是simplexml_load_file读取xml    $xml = simplexml_load_file ( 'a.xml' );    foreach ( $xml->b as $b )    {        if ($c2 == $b->c2)        {            $b->c3 = $c3;        }    }    // 标准化 XML数据    $newxml = $xml->asXML ();    // 打开要写入 XML数据的文件    $fp = fopen ( 'a.xml', 'w' );    // 对文件操作加执行锁    flock ( $fp, LOCK_EX );    // 写入 XML数据    fwrite ( $fp, $newxml );    // 对文件操作加共享锁    flock ( $fp, LOCK_UN );    // 关闭文件    fclose ( $fp );    return true;}//测试功能writeNewB ( 'q', 'w1', 'e1' );writeNewB ( 'q', 'w2', 'e2' );writeNewB ( 'q', 'w3', 'e3' );writeNewB ( 'q', 'w4', 'e4' );deleteBByC2 ( 'w3' );updateC3ByC2 ( 'w2', 'ee2' );

最后的a.xml文件如下

<?xml version="1.0" encoding="UTF-8"?><a>    <b>        <c1>q</c1>        <c2>w1</c2>        <c3>e1</c3>    </b>    <b>        <c1>q</c1>        <c2>w2</c2>        <c3>ee2</c3>    </b>    <b>        <c1>q</c1>        <c2>w4</c2>        <c3>e4</c3>    </b></a>
0 0
原创粉丝点击