PHPでは、XMLデータの処理が一般的なタスクです。 PHPは、XMLを解析および操作するための多くの機能を提供します。ここで、 Simplexml_import_domとSimplexml_load_stringは2つの一般的な関数です。それらはすべてXMLデータをSimplexMLオブジェクトに変換することができますが、さまざまな使用法と適用可能なシナリオを持っています。この記事では、これら2つの機能を詳細に比較し、それぞれの使用シナリオを調べます。
Simplexml_load_String関数は、XML形式の文字列をsimplexmlオブジェクトにロードおよび解析するために使用されます。この関数は、XMLデータが文字列形式で保存されている場合に特に適しています。これは、SimplexMLオブジェクトに直接変換して、後続のデータ操作を容易にすることができます。
<span><span><span class="hljs-title function_ invoke__">simplexml_load_string</span></span><span>(</span><span><span class="hljs-keyword">string</span></span><span> </span><span><span class="hljs-variable">$data</span></span><span>, </span><span><span class="hljs-keyword">string</span></span><span> </span><span><span class="hljs-variable">$class_name</span></span><span> = </span><span><span class="hljs-string">"SimpleXMLElement"</span></span><span>, </span><span><span class="hljs-keyword">int</span></span><span> </span><span><span class="hljs-variable">$options</span></span><span> = </span><span><span class="hljs-number">0</span></span><span>, </span><span><span class="hljs-keyword">string</span></span><span> </span><span><span class="hljs-variable">$ns</span></span><span> = </span><span><span class="hljs-literal">NULL</span></span><span>, </span><span><span class="hljs-keyword">bool</span></span><span> </span><span><span class="hljs-variable">$is_prefix</span></span><span> = </span><span><span class="hljs-literal">FALSE</span></span><span>)
</span></span>
$データ:解析されるXMLデータは、有効なXML文字列である必要があります。
$ class_name :オプションのパラメーター、返されたオブジェクトタイプを指定すると、デフォルトはsimplexmLelementです。
$オプション:通常0の解析オプションは、XML解析方法を定義します。
$ ns :名前空間を指定します。
$ is_prefix :名前空間をプレフィックスとして解析するかどうか。
<span><span><span class="hljs-variable">$xmlString</span></span><span> = </span><span><span class="hljs-string">'<root><name>Tom</name><age>25</age></root>'</span></span><span>;
</span><span><span class="hljs-variable">$xmlObject</span></span><span> = </span><span><span class="hljs-title function_ invoke__">simplexml_load_string</span></span><span>(</span><span><span class="hljs-variable">$xmlString</span></span><span>);
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$xmlObject</span></span><span>->name; </span><span><span class="hljs-comment">// 出力:Tom</span></span><span>
</span></span>
Simplexml_import_dom関数は、DOM(Document Object Model)オブジェクトをSimplexMLオブジェクトに変換するために使用されます。 Dom Extensionsを使用してロードまたは作成されたXMLデータに適しています。この関数を使用すると、DOMオブジェクトをSimplexMLオブジェクトに変換でき、それによりSimplexMLの単純なAPIを使用してさらに処理できます。
<span><span><span class="hljs-title function_ invoke__">simplexml_import_dom</span></span><span>(DOMNode </span><span><span class="hljs-variable">$node</span></span><span>, </span><span><span class="hljs-keyword">string</span></span><span> </span><span><span class="hljs-variable">$class_name</span></span><span> = </span><span><span class="hljs-string">"SimpleXMLElement"</span></span><span>)
</span></span>
$ノード:通常、DOM拡張子を介して取得される有効なDOMノードオブジェクト。
$ class_name :返されたオブジェクトタイプを指定します。デフォルトはsimplexmLelementです。
<span><span><span class="hljs-variable">$dom</span></span><span> = </span><span><span class="hljs-keyword">new</span></span><span> </span><span><span class="hljs-title class_">DOMDocument</span></span><span>();
</span><span><span class="hljs-variable">$dom</span></span><span>-></span><span><span class="hljs-title function_ invoke__">loadXML</span></span><span>(</span><span><span class="hljs-string">'<root><name>Tom</name><age>25</age></root>'</span></span><span>);
</span><span><span class="hljs-variable">$xmlObject</span></span><span> = </span><span><span class="hljs-title function_ invoke__">simplexml_import_dom</span></span><span>(</span><span><span class="hljs-variable">$dom</span></span><span>->documentElement);
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$xmlObject</span></span><span>->name; </span><span><span class="hljs-comment">// 出力:Tom</span></span><span>
</span></span>
simplexml_load_stringとsimplexml_import_domの究極の目的は同じですが、xmlデータをsimplexmlオブジェクトに変換するのは、次の主な違いがあります。
特性 | Simplexml_load_string | Simplexml_import_dom |
---|---|---|
入力タイプ | XML文字列 | DOMノードオブジェクト |
シナリオを使用します | 通常、外部ソース(ファイル、API応答など)からデータを受信するXML形式の文字列を解析するのに適しています。 | ロードまたは作成されたDOMオブジェクトをSimplexmlオブジェクトに変換するのに適しています |
データソース | 文字列形式のXMLデータ | 使用する前に、DOM拡張機能を使用してDOMオブジェクトをロードまたは作成する必要があります |
典型的な用途 | データベース、ファイル、API応答などの外部ソースからXMLデータをロードして、それらを解析します | DOMオブジェクトをsimplexmlオブジェクトに変換して、DOM拡張機能を使用してXMLを操作するときに処理を簡素化する |
拡張機能に依存します | DOM拡張機能に依存する必要はなく、SimplexML拡張機能のみ | PHPを必要とするDOM拡張機能 |
simplexml_load_stringは、XMLデータを受信し、すぐに解析したい場合、非常に便利な機能です。たとえば、APIリクエストを介してXML形式の応答を取得したり、ファイルからXML文字列コンテンツを読んだ場合は、 SimplexML_Load_Stringを使用してSimplexMLオブジェクトに解析します。
<span><span><span class="hljs-variable">$xmlString</span></span><span> = </span><span><span class="hljs-title function_ invoke__">file_get_contents</span></span><span>(</span><span><span class="hljs-string">'data.xml'</span></span><span>);
</span><span><span class="hljs-variable">$xmlObject</span></span><span> = </span><span><span class="hljs-title function_ invoke__">simplexml_load_string</span></span><span>(</span><span><span class="hljs-variable">$xmlString</span></span><span>);
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$xmlObject</span></span><span>->product->name; </span><span><span class="hljs-comment">// 出力产品名称</span></span><span>
</span></span>
この場合、 Simplexml_load_Stringはシンプルで効率的なソリューションを提供します。
Simplexml_import_domは、DOMオブジェクトを処理する必要があるシナリオに適しています。 SimplexMLの簡潔なインターフェイスを使用して、DOM拡張機能( DomDocumentクラスを介してXMLファイルをロードするなど)を使用するときにXMLデータを操作する場合は、 Simplexml_import_domが適切な選択です。例えば:
<span><span><span class="hljs-variable">$dom</span></span><span> = </span><span><span class="hljs-keyword">new</span></span><span> </span><span><span class="hljs-title class_">DOMDocument</span></span><span>();
</span><span><span class="hljs-variable">$dom</span></span><span>-></span><span><span class="hljs-title function_ invoke__">load</span></span><span>(</span><span><span class="hljs-string">'data.xml'</span></span><span>);
</span><span><span class="hljs-variable">$xmlObject</span></span><span> = </span><span><span class="hljs-title function_ invoke__">simplexml_import_dom</span></span><span>(</span><span><span class="hljs-variable">$dom</span></span><span>->documentElement);
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$xmlObject</span></span><span>->product->name; </span><span><span class="hljs-comment">// 出力产品名称</span></span><span>
</span></span>
この場合、 Simplexml_import_domを使用すると、SimplexMLのよりシンプルなAPIを享受しながら、DOMのパワーを引き続き活用できます。
Simplexml_load_Stringは、XML文字列をSimplexMLオブジェクトに解析するのに適しています。特に、外部から取得したXMLデータの処理に適しています。
Simplexml_import_domは、既存のDOMノードをSimplexMLオブジェクトに変換するのに適しています。これは、DOM拡張機能で使用する必要があるシナリオに適しています。
両方とも最終的にSimplexMLオブジェクトを返しますが、使用されるシナリオは異なります。選択する関数は、データソースとニーズに基づいて決定する必要があります。