代码改变世界

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

2014-04-24 13:24  fengyichao  阅读(178)  评论(0)    收藏  举报
[代码] [PHP]代码
view source
001    <?xml version="1.0" encoding="utf-8"?>
002    <article>
003        <item>
004            <title size="1">title1</title>
005            <content>content1</content>
006            <pubdate>2009-10-11</pubdate>
007        </item>
008        <item>
009            <title size="1">title2</title>
010            <content>content2</content>
011            <pubdate>2009-11-11</pubdate>
012        </item>
013    </article>
014     
015    【直接生成字符串】
016    方法1:使用纯粹的PHP代码生成字符串,并把这个字符串写入一个以XML为后缀的文件。这是最原始的生成XML的方法,不过有效!
017    PHP代码如下:
018     
019    <?PHP
020    $data_array = array(
021        array(
022        'title' => 'title1',
023        'content' => 'content1',
024            'pubdate' => '2009-10-11',
025        ),
026        array(
027        'title' => 'title2',
028        'content' => 'content2',
029        'pubdate' => '2009-11-11',
030        )
031    );
032    $title_size = 1;
033     
034    $xml = "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n";
035    $xml .= "<article>\n";
036     
037    foreach ($data_array as $data) {
038    $xml .= create_item($data['title'], $title_size, $data['content'], $data['pubdate']);
039    }
040     
041    $xml .= "</article>\n";
042     
043    echo $xml;
044     
045    //  创建XML单项
046    function create_item($title_data, $title_size, $content_data, $pubdate_data)
047    {
048        $item = "<item>\n";
049        $item .= "<title size=\"" . $title_size . "\">" . $title_data . "</title>\n";
050        $item .= "<content>" . $content_data . "</content>\n";
051        $item .= " <pubdate>" . $pubdate_data . "</pubdate>\n";
052        $item .= "</item>\n";
053     
054        return $item;
055    }
056     
057    ?>
058     
059    【DomDocument】
060    方法2:使用DomDocument生成XML文件
061    创建节点使用createElement方法,
062    创建文本内容使用createTextNode方法,
063    添加子节点使用appendChild方法,
064    创建属性使用createAttribute方法
065    PHP代码如下:
066     
067    <?PHP
068    $data_array = array(
069        array(
070        'title' => 'title1',
071        'content' => 'content1',
072            'pubdate' => '2009-10-11',
073        ),
074        array(
075        'title' => 'title2',
076        'content' => 'content2',
077        'pubdate' => '2009-11-11',
078        )
079    );
080     
081    //  属性数组
082    $attribute_array = array(
083        'title' => array(
084        'size' => 1
085        )
086    );
087     
088    //  创建一个XML文档并设置XML版本和编码。。
089    $dom=new DomDocument('1.0', 'utf-8');
090     
091    //  创建根节点
092    $article = $dom->createElement('article');
093    $dom->appendchild($article);
094     
095    foreach ($data_array as $data) {
096        $item = $dom->createElement('item');
097        $article->appendchild($item);
098     
099        create_item($dom, $item, $data, $attribute_array);
100    }
101     
102    echo $dom->saveXML();
103     
104    function create_item($dom, $item, $data, $attribute) {
105        if (is_array($data)) {
106            foreach ($data as $key => $val) {
107                //  创建元素
108                $$key = $dom->createElement($key);
109                $item->appendchild($$key);
110     
111                //  创建元素值
112                $text = $dom->createTextNode($val);
113                $$key->appendchild($text);
114     
115                if (isset($attribute[$key])) {
116                //  如果此字段存在相关属性需要设置
117                    foreach ($attribute[$key] as $akey => $row) {
118                        //  创建属性节点
119                        $$akey = $dom->createAttribute($akey);
120                        $$key->appendchild($$akey);
121     
122                        // 创建属性值节点
123                        $aval = $dom->createTextNode($row);
124                        $$akey->appendChild($aval);
125                    }
126                }   //  end if
127            }
128        }   //  end if
129    }   //  end function
130    ?>
131     
132    【XMLWriter】
133    方法3:使用XMLWriter类创建XML文件
134    此方法在PHP 5.1.2后有效
135    另外,它可以输出多种编码的XML,但是输入只能是utf-8
136    PHP代码如下:
137     
138    <?PHP
139    $data_array = array(
140        array(
141        'title' => 'title1',
142        'content' => 'content1',
143            'pubdate' => '2009-10-11',
144        ),
145        array(
146        'title' => 'title2',
147        'content' => 'content2',
148        'pubdate' => '2009-11-11',
149        )
150    );
151     
152    //  属性数组
153    $attribute_array = array(
154        'title' => array(
155        'size' => 1
156        )
157    );
158     
159    $xml = new XMLWriter();
160    $xml->openUri("php://output");
161    //  输出方式,也可以设置为某个xml文件地址,直接输出成文件
162    $xml->setIndentString('  ');
163    $xml->setIndent(true);
164     
165    $xml->startDocument('1.0', 'utf-8');
166    //  开始创建文件
167    //  根结点
168    $xml->startElement('article');
169     
170    foreach ($data_array as $data) {
171        $xml->startElement('item');
172     
173        if (is_array($data)) {
174            foreach ($data as $key => $row) {
175              $xml->startElement($key);
176     
177              if (isset($attribute_array[$key]) && is_array($attribute_array[$key]))
178              {
179                  foreach ($attribute_array[$key] as $akey => $aval) {
180                  //  设置属性值
181                        $xml->writeAttribute($akey, $aval);
182                    }
183     
184                }
185     
186                $xml->text($row);   //  设置内容
187                $xml->endElement(); // $key
188            }
189     
190        }
191        $xml->endElement(); //  item
192    }
193     
194    $xml->endElement(); //  article
195    $xml->endDocument();
196     
197    $xml->flush();
198    ?>
199     
200    【SimpleXML】
201    方法4:使用SimpleXML创建XML文档
202     
203    <?PHP
204    $data_array = array(
205        array(
206        'title' => 'title1',
207        'content' => 'content1',
208            'pubdate' => '2009-10-11',
209        ),
210        array(
211        'title' => 'title2',
212        'content' => 'content2',
213        'pubdate' => '2009-11-11',
214        )
215    );
216     
217    //  属性数组
218    $attribute_array = array(
219        'title' => array(
220        'size' => 1
221        )
222    );
223     
224    $string = <<<XML
225    <?xml version='1.0' encoding='utf-8'?>
226    <article>
227    </article>
228    XML;
229     
230    $xml = simplexml_load_string($string);
231     
232    foreach ($data_array as $data) {
233        $item = $xml->addChild('item');
234        if (is_array($data)) {
235            foreach ($data as $key => $row) {
236              $node = $item->addChild($key, $row);
237     
238              if (isset($attribute_array[$key]) && is_array($attribute_array[$key]))
239                {
240                  foreach ($attribute_array[$key] as $akey => $aval) {
241                 //  设置属性值
242                      $node->addAttribute($akey, $aval);
243                }
244              }
245            }
246        }
247    }
248    echo $xml->asXML();
249    ?>