Inspect rows without losing source identity

Repeated sibling names become tables. Columns come from every row in first-seen order: attributes use @name, direct text uses #text, and child elements keep their names. Namespace URIs distinguish names; namespace declarations are excluded from data columns. ∅ means missing and "" means present but empty.

Each table has its own Text/Number comparison and ↑/↓ sort buttons. Missing or invalid numeric keys stay last in both directions; equal keys keep source order. The active heading exposes its sort direction to assistive technology. Source order restores the original order.

Select several rows with their visible checkboxes. Selection stays attached to native source keys through sorting, including in nested tables. It does not follow screen positions or spread to siblings or other examples. Tab and Space operate checkboxes; Enter activates sort buttons, and Enter/Space toggles a disclosure summary.

Edit a source and Tab out, or use Reset source (↺). Every source change or reset clears selection, even for identical text. Invalid source replaces the tables with an error; repair restores the view. These small examples use XML, but the same inspector consumes XML, JSON, YAML and CSV after CEM-ML imports a retained CEM tree. The viewer never builds JavaScript document objects.

This is an explicit table presentation. Use the tree viewer for full structural inspection. Import is bounded to 32 KiB, 64 levels and 4096 events/values; host and enclosing scope budgets also apply.

The reusable table template enables these controls with inspector="true". The format-comparison and XSLT examples keep their existing single-selection controls.

See also

Multi-format tables and XSLT comparison · Retained document trees · Stable sorting in XPath and CEM-QL