现在的位置: 首页 > 综合 > 正文

PHP 简单处理 XML

2013年11月11日 ⁄ 综合 ⁄ 共 3529字 ⁄ 字号 评论关闭

一、手动输出xml

/*
 * 手动输出xml
 */
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
 */

// 创建新文档
$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的读取
 */

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

抱歉!评论已关闭.