PHP Toolkit

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.

Pitfalls

See also