您的位置:首页 > 编程语言 > PHP开发

PHP中的生成XML文件的4种方法

2012-06-22 22:48 501 查看
http://www.phppan.com/2009/10/use-php-create-xml-file/

PHP中的生成XML文件的4种方法

【前言】

使用PHP怎么创建XML文件呢?

一直以来都是使用别人封装好的类,没有自己尝试过,难得放几天假,于是自己总结了下。使用PHP生成XML文件的4种常见方法如下:

【XML文件内容】

1
2
3
4
5
6
7
8
9
10
11
12
13

<?xml version="1.0" encoding="utf-8"?>
<article>
<item>
<title size="1">title1</title>
<content>content1</content>
<pubdate>2009-10-11</pubdate>
</item>
<item>
<title size="1">title2</title>
<content>content2</content>
<pubdate>2009-11-11</pubdate>
</item>
</article>

【直接生成字符串】

方法1:使用纯粹的PHP代码生成字符串,并把这个字符串写入一个以XML为后缀的文件。这是最原始的生成XML的方法,不过有效!

PHP代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
1314
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39

<?PHP
$data_array = array(
array(
'title' => 'title1',
'content' => 'content1',
'pubdate' => '2009-10-11',
),
array(
'title' => 'title2',
'content' => 'content2',
'pubdate' => '2009-11-11',
)
);
$title_size = 1;

$xml = "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n";
$xml .= "<article>\n";

foreach ($data_array as $data) {
$xml .= create_item($data['title'], $title_size, $data['content'], $data['pubdate']);
}

$xml .= "</article>\n";

echo $xml;

//  创建XML单项
function create_item($title_data, $title_size, $content_data, $pubdate_data) {
$item = "<item>\n";
$item .= "<title size=\"" . $title_size . "\">" . $title_data . "</title>\n";
$item .= "<content>" . $content_data . "</content>\n";
$item .= " <pubdate>" . $pubdate_data . "</pubdate>\n";
$item .= "</item>\n";

return $item;
}

?>

【DomDocument】

方法2:使用DomDocument生成XML文件

创建节点使用createElement方法,

创建文本内容使用createTextNode方法,

添加子节点使用appendChild方法,

创建属性使用createAttribute方法

PHP代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
1314
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63

<?PHP
$data_array = array(
array(
'title' => 'title1',
'content' => 'content1',
'pubdate' => '2009-10-11',
),
array(
'title' => 'title2',
'content' => 'content2',
'pubdate' => '2009-11-11',
)
);

//  属性数组
$attribute_array = array(
'title' => array(
'size' => 1
)
);

//  创建一个XML文档并设置XML版本和编码。。
$dom=new DomDocument('1.0', 'utf-8');

//  创建根节点
$article = $dom->createElement('article');
$dom->appendchild($article);

foreach ($data_array as $data) {
$item = $dom->createElement('item');
$article->appendchild($item);

create_item($dom, $item, $data, $attribute_array);
}

echo $dom->saveXML();

function create_item($dom, $item, $data, $attribute) {
if (is_array($data)) {
foreach ($data as $key => $val) {
//  创建元素
$$key = $dom->createElement($key);
$item->appendchild($$key);

//  创建元素值
$text = $dom->createTextNode($val);
$$key->appendchild($text);

if (isset($attribute[$key])) {  //  如果此字段存在相关属性需要设置
foreach ($attribute[$key] as $akey => $row) {
//  创建属性节点
$$akey = $dom->createAttribute($akey);
$$key->appendchild($$akey);

// 创建属性值节点
$aval = $dom->createTextNode($row);
$$akey->appendChild($aval);
}
}   //  end if
}
}   //  end if
}   //  end function
?>

【XMLWriter】

方法3:使用XMLWriter类创建XML文件

此方法在PHP 5.1.2后有效

另外,它可以输出多种编码的XML,但是输入只能是utf-8

PHP代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
1314
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57

<?PHP
$data_array = array(
array(
'title' => 'title1',
'content' => 'content1',
'pubdate' => '2009-10-11',
),
array(
'title' => 'title2',
'content' => 'content2',
'pubdate' => '2009-11-11',
)
);

//  属性数组
$attribute_array = array(
'title' => array(
'size' => 1
)
);

$xml = new XMLWriter();
$xml->openUri("php://output");  //  输出方式,也可以设置为某个xml文件地址,直接输出成文件
$xml->setIndentString('  ');
$xml->setIndent(true);

$xml->startDocument('1.0', 'utf-8');    //  开始创建文件
//  根结点
$xml->startElement('article');

foreach ($data_array as $data) {
$xml->startElement('item');

if (is_array($data)) {
foreach ($data as $key => $row) {
$xml->startElement($key);

if (isset($attribute_array[$key]) && is_array($attribute_array[$key])) {
foreach ($attribute_array[$key] as $akey => $aval) {    //  设置属性值
$xml->writeAttribute($akey, $aval);
}

}

$xml->text($row);   //  设置内容
$xml->endElement(); // $key
}

}
$xml->endElement(); //  item
}

$xml->endElement(); //  article
$xml->endDocument();

$xml->flush();
?>

【SimpleXML】

方法4:使用SimpleXML创建XML文档

1
2
3
4
5
6
7
8
9
10
11
12
1314
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45

<?PHP
$data_array = array(
array(
'title' => 'title1',
'content' => 'content1',
'pubdate' => '2009-10-11',
),
array(
'title' => 'title2',
'content' => 'content2',
'pubdate' => '2009-11-11',
)
);

//  属性数组
$attribute_array = array(
'title' => array(
'size' => 1
)
);

$string = <<<XML
<?xml version='1.0' encoding='utf-8'?>
<article>
</article>
XML;

$xml = simplexml_load_string($string);

foreach ($data_array as $data) {
$item = $xml->addChild('item');
if (is_array($data)) {
foreach ($data as $key => $row) {
$node = $item->addChild($key, $row);

if (isset($attribute_array[$key]) && is_array($attribute_array[$key])) {
foreach ($attribute_array[$key] as $akey => $aval) {    //  设置属性值
$node->addAttribute($akey, $aval);
}
}
}
}
}
echo $xml->asXML();
?>

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: