PHP对XML文件操作

1 篇文章 0 订阅
/**
 * 新建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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值