Análise XML PHP

Qual é a melhor maneira de analisar um arquivo XML em PHP?

Primeiro
Usando o object DOM

//code $dom = new DOMDocument(); $dom->load("xml.xml"); $root = $dom->getElementsByTagName("tag"); foreach($root as $tag) { $subChild = $root->getElementsByTagName("child"); // extract values and loop again if needed } 

Segundo
Usando o método simplexml_load

 // code $xml = simplexml_load_string("xml.xml"); $root = $xml->root; foreach($root as $tag) { $subChild = $tag->child; // extract values and loop again if needed } 

Nota: Estes são os dois que conheço. Se houver mais preenchimento.

Queria saber qual método é o melhor para analisar enormes arquivos XML, e qual método é o mais rápido independentemente da forma como o método precisa ser implementado

O tamanho variará de 500KB a 2MB. O analisador deve poder analisar arquivos pequenos, bem como grandes, na menor quantidade de tempo com o bom uso de memory, se possível.

Depende do documento que você está passando, mas o XMLReader geralmente é mais rápido do que o simplexml e o DOM ( http://blog.liip.ch/archive/2004/05/10/processing_large_xml_documents_with_php.html ). Pessoalmente, eu nunca usei o XMLReader e geralmente decidiu qual o uso, dependendo se preciso ou não o editar:

  • Simplesmente se eu estiver lendo um documento
  • DOM se eu estiver modificando o DOM e salvando-o de volta

Você também pode converter objects entre simplexml e DOM.

Comecei a usar o XMLReader para analisar os arquivos XML. Depois de fazer um pouco de Google encontrou a melhor maneira de analisar arquivos XML, pois não carrega todo o arquivo XML na memory. Diga, se supor que meus arquivos XML eram de 5 MB, enquanto a análise usando o XMLReader 5MB da minha memory não é desperdiçada.

 //usage $xml = new XMLReader(); $xml->XML($xmlString); while($xml->read) { if($xml->localName == 'Something') // check if tag name equals something { //do something } } 

Usando o XML Reader, podemos encontrar se a tag atual é uma tag de abertura ou etiqueta de fechamento e faça o necessário conforme necessário.

Se você estiver processando enormes arquivos, não os analise. Aplicar XSLT em vez disso. Isso economizará grandes quantidades de memory e tempo de processamento.

Eu prefiro simplexml_load_string para facilidade de uso. A velocidade de processamento pode muito bem depender do formato do arquivo XML se os dois usam methods diferentes de análise do arquivo – experimente-o em seus próprios arquivos e veja qual é melhor para você.

Todo o XML é tratado pelo simpleXML em PHP agora quando eu me desenvolvo. É facilmente estendido e os methods são substituídos quando necessário.