欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

PHP 简单处理 XML

程序员文章站 2022-05-05 23:25:00
...
一、手动输出xml
/*
 * 手动输出xml
 * @author flyer0126
 * @since 2012/4/27
 */
header("Content-Type:text/xml");
print '<?xml version="1.0"?>'."\n";
print "<shows>\n";
$shows = array(
                array(
                        'name' => 'aa',
                        'channel' => 'a1',
                        'start' => 'a2'
                ),
                array(
                        'name' => 'bb',
                        'channel' => 'b1',
                        'start' => 'b2'
                ),
                array(
                        'name' => 'cc',
                        'channel' => 'c1',
                        'start' => 'c2'
                )
);
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>
**/

二、通过DOMDocument生成xml

/*
 * 通过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('Content-Type:text/xml');
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> 
 **/

三、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 = '';
$f = fopen("humans.xml", "r");
while($data = fread($f, 2096))
{
$xml .= $data;
}
fclose($f);
preg_match_all('/\<humans\>(.*?)\<\/humans\>/s', $xml, $humans);
foreach($humans[1] as $human)
{
preg_match_all('/\<name\>(.*?)\<\/name\>/s', $human, $names);
preg_match_all('/\<sex\>(.*?)\<\/sex\>/s', $human, $sexes);
preg_match_all('/\<old\>(.*?)\<\/old\>/s', $human, $olds);
}
foreach($names[1] as $k=>$name)
{
echo $names[1][$k].'-'.$sexes[1][$k].'-'.$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
**/