/**
* 新建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>