PHP5 aprimorou o suporte XML e usa DOM para expandir os recursos de operação XML. Essas funções fazem parte do núcleo do PHP5 e não precisam ser instaladas para serem utilizadas.
O exemplo a seguir demonstra simplesmente a operação do DOM em XML. Para uma explicação detalhada, consulte os comentários no código
<?
/************************************************
** use XML em PHP5
**site de referência:
** http://cn.php.net/manual/zh/ref.dom.php
** os códigos a seguir precisam de suporte PHP5
** www.knowsky.com
*************************************************/
//Primeiro crie um objeto DOMDocument
$dom = new DomDocument();
//Então carrega o arquivo XML
$dom -> load("test.xml");
//Arquivo XML de saída
//header("Tipo de conteúdo: text/xml;charset=gb2312");
//echo $dom -> saveXML();
//Salva o arquivo XML, o valor de retorno é int (tamanho do arquivo em bytes)
//$dom -> save("newfile.xml");
echo "<hr/>Obter todos os elementos do título:<hr/>";
$títulos = $dom -> getElementsByTagName("título");
foreach ($títulos como $node)
{
echo $node -> textContent.
//Isso também está ok
//echo $node->firstChild->dados.
}
/*
echo "<hr/>Percorrer todos os nós a partir do nó raiz:<br/>";
foreach ($dom->documentElement->childNodes as $items) {
//Se o nó for um elemento (nodeType == 1) e o nome for item, continue o loop
if ($items->nodeType == 1 && $items->nodeName == "item") {
foreach ($items->childNodes as $titles) {
//Se o nó for um elemento e o nome for título, imprima-o.
if ($titles->nodeType == 1 && $titles->nodeName == "título") {
imprimir $títulos->textContent .
}
}
}
}
*/
//Use XPath para consultar dados
echo "<hr/>O resultado do nó de título do uso da consulta XPath:<hr/>";
$xpath = novo domxpath($dom);
$títulos = $xpath->query("/rss/canal/item/título");
foreach ($títulos como $node)
{
echo $node->textContent."<br/>";
}
/*
Isso é semelhante a usar o método getElementsByTagName(), mas se o Xpath for mais poderoso e aprofundado, pode ser assim:
/rss/channel/item[position() = 1]/title retorna todos os elementos do primeiro elemento do item
/rss/channel/item/title[@id = '23'] Retorna todos os títulos que contêm o atributo id e têm um valor de 23
/rss/channel/&folder&/title retorna os títulos em todos os elementos dos artigos (Nota do tradutor: &folder& representa a profundidade do diretório)
*/
//Escreve novos dados no DOM
$item = $dom->createElement("item");
$título = $dom->createElement("título");
$titleText = $dom->createTextNode("texto do título");
$title->appendChild($titleText);
$item->appendChild($título);
$dom->documentElement->getElementsByTagName('channel')->item(0)->appendChild($item)
;
//$dom->documentElement->RemoveChild($dom->documentElement->getElementsByTagName("canal")->item(0));
//Ou use xpath para consultar o nó e excluí-lo
//$dom->documentElement->RemoveChild($xpath->query("/rss/channel")->item(0));
//$dom->save("newfile.xml");
//Modifica os dados do nó do DOM
//Modifica o primeiro arquivo de título
//Este lugar é estúpido, crie um novo nó e substitua o nó antigo. Se alguém tiver algum outro método bom, por favor me diga.
$firstTitle = $xpath->query("/rss/canal/item/título")->item(0);
$newTitle = $dom->createElement("título");
$newTitle->appendChild(new DOMText("Este é o novo texto do título!!!"));
$firstTitle->parentNode->replaceChild($newTitle, $firstTitle);
//Modifica propriedades
//$firstTitle = $xpath->query("/rss/channel/item/title")->item(0);
//$firstTitle->setAttribute("orderby", "4");
$dom->save("newfile.xml");
echo "<hr/><a href="newfile.xml">View newfile.xml</a>"
//O código a seguir obtém e analisa php A página inicial do .net retornará o conteúdo do primeiro elemento do título.
/*
$dom->loadHTMLFile(" http://www.php.net/ ");
$título = $dom->getElementsByTagName("título");
imprimir $título->item(0)->textContent;
*/
?>
A seguir está o código do arquivo test.xml:
<?xml version="1.0" encoding="gb2312"?>
<rss versão="2.0">
<canal>
<title>javascript</title>
<link>http://blog.csdn.net/zhongmao/category/29515.aspx</link>
<descrição>javascript</descrição>
<idioma>zh-chs</idioma>
<generator>.text versão 0.958.2004.2001</generator>
<item>
<criador>zhongmao</criador>
<title orderby="1">output excel usado javascript</title>
<link>http://blog.csdn.net/zhongmao/archive/2004/09/15/105385.aspx</link>
<pubdate>qua, 15 de setembro de 2004 13:32:00 GMT</pubdate>
<guid>http://blog.csdn.net/zhongmao/archive/2004/09/15/105385.aspx</guid>
<comment>http://blog.csdn.net/zhongmao/comments/105385.aspx</comment>
<comentários>http://blog.csdn.net/zhongmao/archive/2004/09/15/105385.aspx#feedback</comments>
<comentários>2</comentários>
<commentrss>http://blog.csdn.net/zhongmao/comments/commentrss/105385.aspx</commentrss>
<ping>http://blog.csdn.net/zhongmao/services/trackbacks/105385.aspx</ping>
<descrição>descrição do teste</descrição>
</item>
<item>
<criador>zhongmao</criador>
<title orderby="2">palavra colocada usada javascript</title>
<link>http://blog.csdn.net/zhongmao/archive/2004/08/06/67161.aspx</link>
<pubdate>sex, 06 de agosto de 2004 16:33:00 GMT</pubdate>
<guid>http://blog.csdn.net/zhongmao/archive/2004/08/06/67161.aspx</guid>
<comment>http://blog.csdn.net/zhongmao/comments/67161.aspx</comment>
<comentários>http://blog.csdn.net/zhongmao/archive/2004/08/06/67161.aspx#feedback</comments>
<comments>0</comments>
<commentrss>http://blog.csdn.net/zhongmao/comments/commentrss/67161.aspx</commentrss>
<ping>http://blog.csdn.net/zhongmao/services/trackbacks/67161.aspx</ping>
<description>descrição da palavra de teste</description>
</item>
<item>
<criador>zhongmao</criador>
<title orderby="3">xmlhttp</title>
<link>http://blog.csdn.net/zhongmao/archive/2004/08/02/58417.aspx</link>
<pubdate>segunda-feira, 02 de agosto de 2004 10:11:00 GMT</pubdate>
<guid>http://blog.csdn.net/zhongmao/archive/2004/08/02/58417.aspx</guid>
<comment>http://blog.csdn.net/zhongmao/comments/58417.aspx</comment>
<comentários>http://blog.csdn.net/zhongmao/archive/2004/08/02/58417.aspx#feedback</comments>
<comments>0</comments>
<commentrss>http://blog.csdn.net/zhongmao/comments/commentrss/58417.aspx</commentrss>
<ping>http://blog.csdn.net/zhongmao/services/trackbacks/58417.aspx</ping>
<descrição>xmlhttpaaa asd bb cc dd</descrição>
</item>
</canal>
</rss>