8

元の質問は以下ですが、同じ疑問を持つ他の人を見つけやすくなると思うので、タイトルを変更しました。結局、XHTML 文書は XML 文書です。

初心者の質問ですが、PHP5 で XHTML ドキュメントを解析するのに最適なライブラリはどれだと思いますか?

Tidy を使用して HTML ファイル (Word :S を使用して作成されたもの) から XHTML を生成しました。

タグ)。

私は XML をあまり使用したことがありません。PHP で解析するための多くのオプション (Simple XML、DOM など) があるようですが、それらすべてが必要なことを実行できるかどうかはわかりません。使用する。

英語で申し訳ありませんが、私はアルゼンチン出身です。ありがとう!

もう少し情報を追加します。Word 97 で作成した HTML ページがたくさんあります。Tidy を使用してそれらを整理し、XHTML Strict に変換したので、すべて XML 互換になりました。XML パーサーを使用していくつかの要素を見つけて置換したいと考えています (これを行うロジックは重要ではありません)。たとえば、外観を統一するために、すべてのページで同じ CSS スタイルシートとクラス属性を使用したいと考えています。それらはすべて法的文書を含む静的なページであり、奇妙なことは何もありません。どの拡張機能を使用すればよいですか? SimpleXML で十分ですか? 難しくても DOM を学ぶべきですか?

4

7 に答える 7

6

デフォルトの PHP インストールに含まれているSimpleXMLを使用できます。この拡張機能により、XML 構造へのオブジェクト指向アクセスが容易になります。

DOM XMLもあります。この拡張機能の「欠点」は、少し使いづらく、デフォルトでは含まれていないことです。

于 2008-10-29T13:53:47.223 に答える
4

ここで混乱を解消するだけです。PHP には多数の XML ライブラリがあります。これは、php4 にはその方向での優れたオプションがなかったためです。PHP5 以降では、SimpleXmlDOM、およびsax ベースの expat パーサーのいずれかを選択できます。後者はphp4にも存在しました。php4 にも DOM 拡張機能がありましたが、これはphp5 のものとは異なります

DOM と SimpleXml は、同じ問題ドメインの代替手段です。ドキュメントをメモリに読み込み、ツリー構造としてアクセスできるようにします。DOM はややかさばる API ですが、非常に一貫性があり、多くの言語で実装されています。つまり、言語を超えて知識を再利用できます (たとえば Javascript)。最初は SimpleXml の方が簡単かもしれません。

SAX パーサーは別物です。xml ドキュメントをタグのストリームとして扱います。これは、すべてをメモリに保持する必要がないため、非常に大きなドキュメントを扱う場合に便利です。

あなたの使用法では、おそらくDOM APIを使用します。

于 2008-10-29T16:14:28.280 に答える
4
  • DOMは、W3C によって標準化された XML などの階層データ用の言語に依存しない標準 API です。多くの機能を備えた豊富な API です。各ノードがオブジェクトであるという点で、オブジェクトベースです。

    DOM は、読み取りまたは書き込みだけでなく、他のノード間にノードを挿入したり、構造を変更したりするなど、既存のドキュメントのノードを多数操作したい場合に適しています。

  • SimpleXMLは PHP 固有の API であり、これもオブジェクト ベースですが、DOM よりもはるかに「簡潔」になるように意図されています。その API は DOM ほど豊富ではありませんが、XPath ルックアップなどの機能や、複数の名前空間のドキュメントを操作する基本的な機能が含まれています。そして、重要なことに、XML CDATA セクションやコメントなど、ドキュメントのすべての機能が保持されますが、それらを操作する関数は含まれていません。

    SimpleXML は読み取り専用に非常に適しています。XML ドキュメントを読み取って別の形式に変換するだけであれば、多くのコードを節約できます。また、ドキュメントを生成したり、子要素や属性の追加や変更などの基本的な操作を行いたい場合にもかなり適していますが、既存のドキュメントを多数操作すると複雑になる可能性があります (不可能ではありません)。たとえば、他の 2 つの要素の間に子要素を追加するのは簡単ではありません。addChild は、他の要素の後にのみ挿入します。SimpleXML も XSLT 変換を実行できません。「getElementsByTagName」や「getElementById」のようなものはありませんが、XPath を知っていれば、SimpleXML でそのようなことを行うことができます。

    SimpleXMLElement オブジェクトは、やや「魔法のような」ものです。var_dump/printr/var_export の場合に公開されるプロパティは、完全な内部表現に対応していません。-> 演算子でアクセスできるプロパティであるかのように子要素の一部を公開しますが、ドキュメント全体を内部で保持し、 [] を使用して名前が予約語である子要素にアクセスするなどの操作を実行できます。連想配列であるかのように演算子。

PHP は次の関数を実装しているため、どちらかに完全にコミットする必要はありません。

  • simplexml_import_dom(DOMNode)
  • dom_import_simplexml(SimpleXMLElement)

これは、SimpleXML を使用していて、DOM ノードを予期するコードを操作する必要がある場合、またはその逆の場合に役立ちます。

PHP は、3 番目の XML ライブラリも提供します。

  • XML パーサー(言語に依存しないインターフェースであるSAXの実装ですが、マニュアルではその名前で言及されていません) は、はるかに低レベルのライブラリであり、まったく異なる目的を果たします。オブジェクトを構築するわけではありません。次のトークンに進み、タグ名や開始タグか終了タグかなどのトークンのタイプを見つける仕事をするため、基本的には独自の XML パーサーを簡単に作成できるようになります。 . 次に、トークンが検出されるたびに実行するコールバックを作成する必要があります。ドキュメントをツリー内のオブジェクト/配列として表現する、ドキュメントを操作するなどのすべてのタスクは、個別に実装する必要があります。XML パーサーでできることは、低レベルのパーサーを作成することだけだからです。

    XML パーサー関数は、特定のメモリまたは速度の要件がある場合でも非常に役立ちます。これを使用すると、一度にすべてのコンテンツをメモリに保持することなく、非常に長い XML ドキュメントを解析できるパーサーを作成できます。また、すべてのデータに関心がなく、それをツリーまたは PHP オブジェクトのセットに入れる必要がない、または入れたくない場合は、そのほうが速くなります。たとえば、XHTML ドキュメントをスキャンしてすべてのリンクを見つけたい場合、構造は気にしません。

于 2009-04-09T03:56:36.697 に答える
1

私は、 SimpleXMLElementを好みます。これは、要素を処理するのに非常に使いやすいからです。

編集:利用可能なバージョン情報はありませんが、PHP5、少なくとも5.2.5、おそらくそれ以前で利用可能です。

これは本当に個人的な選択ですが、 XML 拡張機能はたくさんあります。

無効なマークアップがあると、多くの XML パーサーが動作を停止することに注意してください。XHTML は XML であるべきですが、常にそうとは限りません!

于 2008-10-29T13:55:17.767 に答える
0

昨年、PHP5で少しXML解析を行い、SimpleXMLを組み合わせて使用​​することにしました。

DOMは、新しいXMLツリーを作成したり、既存のXMLツリーに追加したりする場合に、もう少し便利です。少し柔軟性があります。

于 2008-10-29T14:07:58.553 に答える
0

PHP で XML 構文解析を行ってから長い年月 (2 年以上) が経ちましたが、XML_Parser Pear パッケージから常に良好で使用可能な結果が得られました。そうは言っても、私は PHP5 に触れたことはほとんどないので、最近、より優れた組み込みの代替手段があるかどうかはわかりません。

于 2008-10-29T13:56:49.917 に答える
0

それは本当にあなたが達成しようとしていることに依存します。かなり大量のデータを取得する場合、つまり店舗の Web サイトから製品情報などの多くのレコードを取得するには、おそらく Expat を使用します。パフォーマンスの向上。これらの量では、SQL を使用している可能性があります。

SimpleXML を使用することをお勧めします。それは非常に直感的で、使いやすく、書きやすいです。また、XPath との連携も良好です。

DOM を実際にあまり使用する必要はありませんでしたが、記述しているのと同じくらい大きなものに XML パーサーを使用している場合は、SimpleXML よりも少し機能的であるため、それを使用することをお勧めします。

3 つすべてについては、W3C Schools で読むことができます。

http://www.w3schools.com/php/php_xml_parser_expat.asp

http://www.w3schools.com/php/php_xml_simplexml.asp

http://www.w3schools.com/php/php_xml_dom.asp

于 2008-10-29T14:17:28.673 に答える