مقدمة
يوفر DOMDocument، وهو فئة PHP، أسلوبًا مناسبًا للتحليل ومعالجة مستندات HTML. ومع ذلك، عند محاولة الاحتفاظ بعلامات HTML أثناء استخراج المحتوى، قد يواجه المستخدمون صعوبات. تتعمق هذه المقالة في المفهوم الأساسي لـ DOM وتقترح حلولاً لمواجهة هذا التحدي.
فهم DOM والعقد
يمثل DOMDocument مستندات HTML كأشجار هرمية من العقد. يمكن أن تحتوي كل عقدة على عقد فرعية، مما يشكل بنية معقدة. من المهم أن ندرك أن عناصر HTML، إلى جانب سماتها ومحتوياتها النصية، يتم تمثيلها جميعًا كعقد داخل مستند DOMDocument.حل مشكلة الاحتفاظ بالعلامة
المقدمة نجح الكود في جلب عقدة DIV بمعرف "showContent". ومع ذلك، فإنه يقوم فقط باسترداد محتوى النص داخل DIV، باستثناء علامات HTML نفسها. وذلك لأن الكود يستخدم$tag->nodeValue، الذي يستخرج النص فقط بدلاً من العقد الفعلية.
الحل: اجتياز العقد
للحفاظ على عقد HTML، تحتاج إلى اجتياز العقد الفرعية للعقدة المستهدفة. يعرض الكود أدناه هذا الأسلوب:$dom = new DOMDocument(); @$dom->loadHTML($html); $xpath = DOMXPath الجديد($dom); $tags = $xpath->query('.//div[@id="showContent"]'); foreach ($tags كعلامة $) { صدى $dom->saveXML($tag); صدى '$dom = new DOMDocument(); @$dom->loadHTML($html); $xpath = new DOMXPath($dom); $tags = $xpath->query('.//div[@id="showContent"]'); foreach ($tags as $tag) { echo $dom->saveXML($tag); echo '
'; }
استرداد معلومات محددة من HTML
إذا كنت تحتاج إلى معلومات محددة من مستند HTML، مثل الروابط من الجدول، فيمكنك تعديل استعلام XPath لتحديد العقد المناسبة. على سبيل المثال:foreach ($div->getElementsByTagName('a') as $link) { صدى $dom->saveXML($link);$dom = new DOMDocument(); @$dom->loadHTML($html); $xpath = new DOMXPath($dom); $tags = $xpath->query('.//div[@id="showContent"]'); foreach ($tags as $tag) { echo $dom->saveXML($tag); echo '
'; }
موارد إضافية لمزيد من المساعدة حول العمل مع DOMDocument، راجع الموارد التالية:
وثائق DOMDocument](https ://www.php.net/manual/en/class.domdocument.php)
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3