1

このxmlファイルを取るクラスがあります:

<?xml version="1.0" encoding="utf-8" ?> 
    <pagedata> 
        <language>en-es</language> 
        <meta> 
            <![CDATA[
            <title>web page</title>
            ]]>
        </meta> 
        <pagecontent> 
            <class>test</class> 
                </pagecontent>
         </pagedata>

XML_Unserializer を使用して、これを配列に変更します。あれは。。。になる:

Array
(
    [language] => en-US
    [meta] => <title></title> 
    [pagecontent] => Array
        (
            [class] => test
)

次に、配列内のキーの値を返すメソッドがあります。たとえば、使用する言語が必要な場合は、$class->getData('language')または$class->getData('pagecontent:class').

PHP4 はサポートされなくなったため、ネイティブの XML 実装に依存できるようになりました。私は、SimpleXML と標準の php DOM ライブラリの両方を使用してきました。より強力で柔軟性があり、simpleXML にはいくつかの注意事項があるため、私は後者を好みます。

unserializer クラスを使用して以来、ほぼすべてのメソッドが などの関数メソッドと対話しますforeach。それを配列にしておく価値があるかどうか疑問に思っています。これにより、すべてのメソッドをリファクタリングする必要がなくなりますか? さらに、次のようなメソッドを実装する必要があるため、要素の nodeValue 全体を取得するのが面倒な場合があることもわかっています。

function innerHTML($node){
  $doc = new DOMDocument();
  foreach ($node->childNodes as $child)
    $doc->appendChild($doc->importNode($child, true));

  return $doc->saveHTML();
}

また、常に DOMDocument を作成するため、そのメソッドを何度も使用するのは効率が悪いようです。おそらくメソッドをリファクタリングして、同じ DOMDocument を何度も使用し、フラグメントを追加することもできますが、やり過ぎのようです。

標準のDOMライブラリを使用する必要があるかどうか、もしそうなら、すべてのメソッドをリファクタリングしてDOM関数を使用するか、配列を作成してメソッドをそのままにしておく必要があるかどうかに関して、この方法に関する意見をいただければ幸いです。新しいバグが発生する可能性が低くなりますか?

ありがとう。

4

1 に答える 1

0

ほんの少しの変更でforeachループを維持できるので、あなたのケースではSimpleXMLを使用します。これにより、PHPのDOM自体を使用するよりもXMLを簡単に使用できるようになります。属性へのアクセスも簡単です。

于 2011-04-24T23:59:42.703 に答える