Home  >  Article  >  Backend Development  >  Simple processing of XML with PHP

Simple processing of XML with PHP

巴扎黑
巴扎黑Original
2016-11-23 13:49:07968browse

1. Manually output xml

/*
 * 手动输出xml
 * @author flyer0126
 * @since 2012/4/27
 */
header("Content-Type:text/xml");
print &#39;<?xml version="1.0"?>&#39;."\n";
print "<shows>\n";
$shows = array(
                array(
                        &#39;name&#39; => &#39;aa&#39;,
                        &#39;channel&#39; => &#39;a1&#39;,
                        &#39;start&#39; => &#39;a2&#39;
                ),
                array(
                        &#39;name&#39; => &#39;bb&#39;,
                        &#39;channel&#39; => &#39;b1&#39;,
                        &#39;start&#39; => &#39;b2&#39;
                ),
                array(
                        &#39;name&#39; => &#39;cc&#39;,
                        &#39;channel&#39; => &#39;c1&#39;,
                        &#39;start&#39; => &#39;c2&#39;
                )
);
foreach($shows as $show)
{
    print "<show>\n";
    foreach($show as $tag => $val)
    {
        print "<$tag>".htmlspecialchars($val)."</$tag>\n";
    }
    print "</show>\n";
}
print "</shows>\n";
/**
<?xml version="1.0"?>
<shows>
<show>
<name>aa</name>
<channel>a1</channel>
<start>a2</start>
</show>
<show>
<name>bb</name>
<channel>b1</channel>
<start>b2</start>
</show>
<show>
<name>cc</name>
<channel>c1</channel>
<start>c2</start>
</show>
</shows>
**/

2. Generate xml through DOMDocument

/*
 * 通过DOMDocument生成xml
 * @author flyer0126
 * @since 2012/4/27
 */
// 创建新文档
$dom = new DOMDocument("1.0", "UTF-8");
// 创建根元素humans,并将其添加至文档
$humans = $dom->appendChild($dom->createElement("humans"));
// 创建根元素zhangying,并将其添加至humans
$zhangying = $humans->appendChild($dom->createElement("zhangying"));
// 创建name元素,并将其添加至zhangying
$name = $zhangying->appendChild($dom->createElement("name"));
$name->appendChild($dom->createTextNode("张映"));
$sex = $zhangying->appendChild($dom->createElement("sex"));
$sex->appendChild($dom->createTextNode("男"));
$old = $zhangying->appendChild($dom->createElement("old"));
$old->appendChild($dom->createTextNode("28"));
// 创建根元素tank,并将其添加至humans
$tank = $humans->appendChild($dom->createElement("tank"));
// 创建name元素,并将其添加至tank
$name = $tank->appendChild($dom->createElement("name"));
$name->appendChild($dom->createTextNode("tank"));
$sex = $tank->appendChild($dom->createElement("sex"));
$sex->appendChild($dom->createTextNode("男"));
$old = $tank->appendChild($dom->createElement("old"));
$old->appendChild($dom->createTextNode("28"));
/*// 设置author元素
$author = $book->appendChild($dom->createElement("author"));
$author->appendChild($dom->createTextNode("zhangh"));
$author->setAttribute("class", "win_close");*/
// 输出
$dom->formatOutput = true;
header(&#39;Content-Type:text/xml&#39;);
echo $dom->saveXML();
// 将文档表现形式放于book变量中
//$book = $dom->saveXML();
// 将文档输出为book.xml文件
//$dom->save("humans.xml");
/**
    <?xml version="1.0 encoding="UTF-8"?>
    <humans>
    <zhangying>
    <name>张映</name>
    <sex>男</sex>
    <old>28</old>
    </zhangying>
    <tank>
    <name>tank</name>
    <sex>男</sex>
    <old>28</old>
    </tank>
    </humans> 
 **/

3. Read xml

/*
 * xml的读取
 * @author flyer0126
 * @since 2012/4/27
 */
// 1. 利用simplexml_load_file读取简单的xml文件
$humans = simplexml_load_file("humans.xml");
foreach($humans as $key => $human)
{
    echo $human->name."->".$human->sex."->".$human->old."\n";
}
/**
张映->男->28
tank->男->28
**/
// 2. 利用DOMDocument读取xml
$dom = new DOMDocument();
$dom->load("humans.xml");
$humans = $dom->getElementsByTagName("humans");
foreach($humans as $key=>$human)
{
$names = $human->getElementsByTagName("name");
$olds = $human->getElementsByTagName("old");
$sexes = $human->getElementsByTagName("sex");
foreach($names as $k=>$name)
{
$name = $names->item($k)->nodeValue;
$sex = $sexes->item($k)->nodeValue;
$old = $olds->item($k)->nodeValue;
echo "$name->$sex->$old\n";
}
}
/**
张映->男->28
tank->男->28
**/
// 3. 利用正则来获取数据
$xml = &#39;&#39;;
$f = fopen("humans.xml", "r");
while($data = fread($f, 2096))
{
$xml .= $data;
}
fclose($f);
preg_match_all(&#39;/\<humans\>(.*?)\<\/humans\>/s&#39;, $xml, $humans);
foreach($humans[1] as $human)
{
preg_match_all(&#39;/\<name\>(.*?)\<\/name\>/s&#39;, $human, $names);
preg_match_all(&#39;/\<sex\>(.*?)\<\/sex\>/s&#39;, $human, $sexes);
preg_match_all(&#39;/\<old\>(.*?)\<\/old\>/s&#39;, $human, $olds);
}
foreach($names[1] as $k=>$name)
{
echo $names[1][$k].&#39;-&#39;.$sexes[1][$k].&#39;-&#39;.$olds[1][$k]."\n";
}
/**
张映->男->28
tank->男->28
**/
// 4. 利用XMLReader获取数据
$reader = new XMLReader();
$reader->open("humans.xml");
$i = 1;
while($reader->read())
{
if($reader->nodeType == XMLReader::TEXT)
{
if($i%3)
{
echo $reader->value;
}else
{
echo $reader->value."\n";
}
$i++;
}
}
/**
张映男28
tank男28
**/


Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Previous article:php object serializationNext article:php object serialization