XML
A streaming, namespace-aware XML processor in pure PHP. Read huge feeds, WXR exports, ePub manifests, and Office Open XML parts incrementally, then emit edited XML without depending on libxml2.
composer require wp-php-toolkit/xml
SimpleXMLElement and DOMDocument both need libxml2 and both build a complete in-memory tree. XMLProcessor walks the document forward as a cursor, keeps modifications in a side buffer, and emits the full updated XML with get_updated_xml() only when you ask for it. Reading stays incremental; materializing the updated XML still allocates the resulting document.
This design came from WordPress-scale documents such as WXR exports. A migration may only need to rewrite wp:attachment_url values or bump a feed attribute, so the processor optimizes for targeted cursor edits instead of a full validating XML stack.
Bump every price in a catalog
Find each <book>, read its price, write a new one, emit the updated document.
Read namespaced attributes from a WXR export
WordPress's WXR commonly uses wp:, dc:, and content: prefixes bound to namespace names such as http://wordpress.org/export/1.2/. Pass that expanded namespace name, not the prefix; the processor handles whichever prefix the document actually uses.
Rewrite URLs across an entire WXR export
Large WXR exports can hold many URLs in <link>, <guid>, and post content. The cursor can find and rewrite matching text nodes incrementally; calling get_updated_xml() returns the complete rewritten document.
Parse OPML to extract feed URLs
OPML is the format Feedly and many readers use to import/export feed lists. Flat, attribute-heavy XML — exactly what a tag processor handles best.