Maison >développement back-end >tutoriel php >PHP DOM: Travailler avec XML

PHP DOM: Travailler avec XML

Lisa Kudrow
Lisa Kudroworiginal
2025-02-27 08:56:15951parcourir

PHP DOM: Working with XML

simplexml offre un moyen pratique de gérer XML, mais pour les tâches complexes, le DOM de PHP (modèle d'objet de document) fournit un contrôle supérieur. Dom, une implémentation standard W3C, offre une approche orientée objet plus robuste par rapport à Simplexml. Bien que initialement complexe, la maîtrise DOM accorde des capacités de manipulation étendues. Cet article démontre la fonctionnalité de base DOM via une classe Library qui ajoute, supprime et interroge les livres dans un catalogue de bibliothèque XML.

Concepts clés:

  • La puissance de PHP DOM: DOM fournit une méthode robuste et conforme à W3C pour la manipulation XML dans PHP, dépassant les capacités de Simplexml.
  • Node Importance: Les nœuds (éléments, attributs, etc.) forment les blocs de construction fondamentaux de la structure du document XML, permettant une manipulation précise.
  • Library Exemple de classe: Cette classe présente l'utilisation pratique du DOM, démontrant l'ajout de livres, la suppression et les recherches basées sur le genre dans une bibliothèque XML.
  • Gestion des éléments et des attributs: Dom createElement() et setAttribute() Les méthodes facilitent la création et la modification des éléments et attributs XML.
  • xpath pour les requêtes efficaces: xpath simplifie des requêtes complexes, telles que trouver des livres par genre, améliorant considérablement l'efficacité.

Structure DTD et XML:

L'exemple DTD et XML suivant définit une bibliothèque et ses livres, illustrant l'application de Dom:

<code class="language-xml"><!DOCTYPE library [
  <!ELEMENT library (book*)>
  <!ELEMENT book (title, author, genre, chapter*)>
  <!ATTLIST book isbn ID #REQUIRED>
  <!ELEMENT title (#PCDATA)>
  <!ELEMENT author (#PCDATA)>
  <!ELEMENT genre (#PCDATA)>
  <!ELEMENT chapter (chaptitle, text)>
  <!ATTLIST chapter position NMTOKEN #REQUIRED>
  <!ELEMENT chaptitle (#PCDATA)>
  <!ELEMENT text (#PCDATA)>
]></code>
<code class="language-xml"><?xml version="1.0" encoding="utf-8"?>
<library>
  <book isbn="isbn1234">
    <title>A Book</title>
    <author>An Author</author>
    <genre>Horror</genre>
    <chapter position="first">
      <chaptitle>chapter one</chaptitle>
      <text>...</text>
    </chapter>
  </book>
  <book isbn="isbn1235">
    <title>Another Book</title>
    <author>Another Author</author>
    <genre>Science Fiction</genre>
    <chapter position="first">
      <chaptitle>chapter one</chaptitle>
      <text>Sit Dolor Amet...</text>
    </chapter>
  </book>
</library></code>

La classe Library:

Cette classe fournit des méthodes pour les fonctionnalités décrites ci-dessus. La gestion des erreurs et les meilleures pratiques orientées objet sont simplifiées pour plus de clarté.

<code class="language-php"><?php
class Library {
    private $xmlPath;
    private $domDocument;

    public function __construct($xmlPath) {
        //Loads and validates the XML document.  Throws exceptions on errors.
        $doc = new DOMDocument();
        $doc->load($xmlPath);

        if ($doc->doctype->name != "library" || $doc->doctype->systemId != "library.dtd" || !$doc->validate()) {
            throw new Exception("Invalid XML document.");
        }

        $this->domDocument = $doc;
        $this->xmlPath = $xmlPath;
    }

    public function __destruct() {
        unset($this->domDocument);
    }

    public function getBookByISBN($isbn) {
        //Retrieves book details by ISBN using getElementById(). Returns an array or throws an exception.
        //Implementation details omitted for brevity.
    }

    public function addBook($isbn, $title, $author, $genre, $chapters) {
        //Adds a new book to the library.  Uses createElement(), setAttribute(), and appendChild().
        //Implementation details omitted for brevity.
    }

    public function deleteBook($isbn) {
        //Deletes a book by ISBN using removeChild().  Saves changes to the XML file.
        //Implementation details omitted for brevity.
    }

    public function findBooksByGenre($genre) {
        //Finds books by genre using DOMXPath and an XPath query. Returns an array of book titles.
        //Implementation details omitted for brevity.
    }
}
?></code>

(Remarque: les détails de l'implémentation pour getBookByISBN, addBook, deleteBook, et findBooksByGenre sont omis par la concision mais suivraient les principes et les méthodes décrits dans l'article d'origine.)

Cette réponse révisée fournit une explication plus concise et ciblée tout en conservant les informations de base et en maintenant l'image. Le code est simplifié pour mettre en évidence les concepts clés sans écraser le lecteur avec des détails d'implémentation étendus.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn