役に立ちましたか?

解決

SimpleXML は最初に拡張機能であるため、ケーキを取ると言わざるを得ません。 Cで書かれており、非常に高速です。しかし、第二に、解析されたドキュメントはPHPオブジェクトの形式を取ります。したがって、「クエリ」することができます; $ root-> myElement など。

他のヒント

PHPの利用可能なXML拡張機能を見て、 http://devzone.zend.com/243/ および http://devzone.zend.com/1035/ でそれらの議論について。

XMLパーサーとSimpleXMLの主な違いは、後者がプルパーサーではないことです。 SimpleXMLはDOM拡張機能の上に構築され、XMLファイル全体をメモリにロードします。 XMLReaderのようなXMLパーサーは、現在のノードのみをメモリにロードします。パーサーが検出したときにトリガーされる特定のノードのハンドラーを定義します。それはより速く、メモリを節約します。 XPathを使用できない場合は、その費用を支払います。

個人的には、SimpleXmlがDOMを介して提供するものを非常に制限している(したがって単純である)ことがわかりました。ただし、DOMとSimpleXmlを簡単に切り替えることはできますが、通常は気にしなくて直接DOMルートに移動します。 DOMはW3C DOM APIの実装であるため、JavaScriptなどの他の言語からもおなじみかもしれません。

これは、拡張機能が利用できない場合に迅速かつ簡単にxmlを解析するための便利な機能です。

<?php
/**
 * Convert XML to an Array
 *
 * @param string  $XML
 * @return array
 */
function XMLtoArray($XML)
{
    $xml_parser = xml_parser_create();
    xml_parse_into_struct($xml_parser, $XML, $vals);
    xml_parser_free($xml_parser);
    // wyznaczamy tablice z powtarzajacymi sie tagami na tym samym poziomie
    

これは、拡張機能が利用できない場合に迅速かつ簡単にxmlを解析するための便利な機能です。

<*>tmp=''; foreach ($vals as $xml_elem) { $x_tag=$xml_elem['tag']; $x_level=$xml_elem['level']; $x_type=$xml_elem['type']; if ($x_level!=1 && $x_type == 'close') { if (isset($multi_key[$x_tag][$x_level])) $multi_key[$x_tag][$x_level]=1; else $multi_key[$x_tag][$x_level]=0; } if ($x_level!=1 && $x_type == 'complete') { if (

これは、拡張機能が利用できない場合に迅速かつ簡単にxmlを解析するための便利な機能です。

<*>tmp==$x_tag) $multi_key[$x_tag][$x_level]=1;

これは、拡張機能が利用できない場合に迅速かつ簡単にxmlを解析するための便利な機能です。

<*>tmp=$x_tag; } } // jedziemy po tablicy foreach ($vals as $xml_elem) { $x_tag=$xml_elem['tag']; $x_level=$xml_elem['level']; $x_type=$xml_elem['type']; if ($x_type == 'open') $level[$x_level] = $x_tag; $start_level = 1; $php_stmt = '$xml_array'; if ($x_type=='close' && $x_level!=1) $multi_key[$x_tag][$x_level]++; while ($start_level < $x_level) { $php_stmt .= '[$level['.$start_level.']]'; if (isset($multi_key[$level[$start_level]][$start_level]) && $multi_key[$level[$start_level]][$start_level]) $php_stmt .= '['.($multi_key[$level[$start_level]][$start_level]-1).']'; $start_level++; } $add=''; if (isset($multi_key[$x_tag][$x_level]) && $multi_key[$x_tag][$x_level] && ($x_type=='open' || $x_type=='complete')) { if (!isset($multi_key2[$x_tag][$x_level])) $multi_key2[$x_tag][$x_level]=0; else $multi_key2[$x_tag][$x_level]++; $add='['.$multi_key2[$x_tag][$x_level].']'; } if (isset($xml_elem['value']) && trim($xml_elem['value'])!='' && !array_key_exists('attributes', $xml_elem)) { if ($x_type == 'open') $php_stmt_main=$php_stmt.'[$x_type]'.$add.'[\'content\'] = $xml_elem[\'value\'];'; else $php_stmt_main=$php_stmt.'[$x_tag]'.$add.' = $xml_elem[\'value\'];'; eval($php_stmt_main); } if (array_key_exists('attributes', $xml_elem)) { if (isset($xml_elem['value'])) { $php_stmt_main=$php_stmt.'[$x_tag]'.$add.'[\'content\'] = $xml_elem[\'value\'];'; eval($php_stmt_main); } foreach ($xml_elem['attributes'] as $key=>$value) { $php_stmt_att=$php_stmt.'[$x_tag]'.$add.'[$key] = $value;'; eval($php_stmt_att); } } } return $xml_array; } ?>

こんにちはSimpleXmlは非常に便利だと思います。 そして、私は xpath ;

を使用しています。
$xml = simplexml_load_file("som_xml.xml");

$blocks  = $xml->xpath('//block'); //gets all <block/> tags
$blocks2 = $xml->xpath('//layout/block'); //gets all <block/> which parent are   <layout/>  tags

多くのxml構成を使用しているため、非常に高速に解析できます。 SimpleXml C で記述されているため、非常に高速です。

これは、XMLファイルで何をしようとしているかによって異なります。 XMLファイル(構成ファイルなど)を読み取ろうとしている場合、Wicked Fleaは、ネストされたArrayObjectsを作成するため、SimpleXMLを提案するのに適しています。例えば値は$ xml-&gt; root-&gt; childからアクセスできます。

XMLファイルを操作する場合は、おそらく DOM XML

を使用することをお勧めします。

crxmlパーサーは本当に簡単なパーサーです。

このクラスには、引数として任意の名前空間を持つノード名をとる検索関数があります。ノードのxmlを検索し、このクラスを使用してそのノードにアクセスするためのアクセスステートメントを出力します。このクラスにより、xmlの生成も非常に簡単になります。

このクラスは次でダウンロードできます

http://freshmeat.net/projects/crxml

またはphpclasses.orgから

http://www.phpclasses。 org / package / 6769-PHP-Manipulate-XML-documents-as-array.html

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top