Changelog¶
All notable changes to the XmlExtractor macro are recorded in this file.
The format follows Keep a Changelog, and the versions are Semantic Versioning. The Linnworks Application Store numbers releases its own way; the store number for each release is given under its heading.
[1.1.0] - 2026-09-09¶
Application Store version 0.20.
Support for the Shopify GraphQL order XML that Linnworks is rolling out, plus robustness fixes found while building the test suite.
The macro stays backward compatible: on the same XML, a path that resolved in
1.0.0 resolves to the same value in 1.1.0, except for the two corrections
listed under Fixed, each of which names the paths it affects. On
the new Shopify XML, existing paths survive the PascalCase-to-camelCase
change, and NoteAttribute. reads the new key/value pairs. Paths that name fields Linnworks renamed, moved
into money objects, or no longer includes still need updating. See
the Shopify GraphQL migration guide.
Added¶
>>direct-child separator in paths.Order>>idmatches only aniddirectly underOrder, and at the start of a path>>idpicks the shallowestidin the document. The GraphQL XML nests copies ofid,name, andlineItemsunderfulfillmentOrdersbefore the order's own nodes, soidalone now finds a location id. A path that already contained>>by accident wrote nothing in 1.0.0 and may now resolve.- Case-insensitive fallback for path labels. Exact case wins when it exists; otherwise the first label that matches ignoring case is used. Rescues configurations broken only by the PascalCase-to-camelCase change.
- Backtracking. When the rest of a path finds nothing under a match, or the value is empty, the next match is tried. Prefix lookups skip pairs whose value is empty the same way.
NoteAttribute.<key>falls back to akey/valuepair when noname/valuepair matches, so it reads Shopify GraphQLcustomAttributeswithout a configuration change.- The log line
Order XML format: Shopify GraphQLfor orders in the new format. - Test suite: raw order XML fixtures from Linnworks' notice and a converter that renders them into the tree the macro reads.
Fixed¶
- A prefix lookup no longer throws on an empty label node such as
<name />, which the GraphQL XML contains many of. In 1.0.0 the whole order was skipped. - A prefix in any level after the first, such as
Order>WooMeta.x, logs not found instead of skipping the whole order. - The same path listed twice with different spacing is written once instead of skipping the whole order.
- A failure fetching the order XML, a
WebExceptionwithout a readable response, or a parse error near the start of the XML is logged for that order and the batch continues. In 1.0.0 each of these ended the batch. - The parse-error snippet in the log now surrounds the error on multi-line XML. In 1.0.0 the column number was used as an offset into the string.
- Note de-duplication no longer throws on an existing note with no text.
- A prefix lookup only accepts a value label that sits next to the key
label. In 1.0.0 a product whose name equalled the key could yield a value
from a neighbouring subtree. Affects
NoteAttribute.<key>,WooMeta.<key>,Metafield.<key>, andVariationSelectedOption.<key>. Every shape seen so far, WooCommerce, Shopify REST and GraphQL, and Etsy, renders the key and value as siblings. - A prefix with nothing after the dot, such as
NoteAttribute., is not found. In 1.0.0 the empty key matched empty nodes. - Prefix detection and label comparison are culture-independent.
- The
Updating N ...log lines count the values written, not the paths requested. - The empty-entry warning and the 8-level error are logged once per run, before the first order, instead of once per order.
Changed¶
- Label matching in plain paths is no longer strictly case-sensitive. See Added.
- Internal: the eight duplicated depth cases are one recursive walk, the prefix lookups are table-driven, and the four note targets share one routine with their de-duplication rules unchanged. The 8-level limit is unchanged.
Verification: two Shopify orders in the old format were captured from a
Linnworks development site on 2026-09-05 through Orders/GetOrderXmlJSTree
and Orders/GetOrderXml. The test converter reproduces the real rendering
byte for byte from the raw XML, and the suite runs the macro against those
real renderings. The GraphQL cases run against Linnworks' raw XML samples
and Shopify's documented responses through that same, now proven,
converter. No GraphQL order has been captured from a live account yet; the
development site's Shopify integration is still on the old format.
[1.0.0] - 2020¶
Application Store versions 0.2 through 0.17, published from 2020 until 9 September 2026. The oldest installation still active dates from 22 May 2020. This changelog calls the code as it stood at 0.17 version 1.0.0; the store's own release notes are listed at the end of this entry. The source was imported into this repository on 4 September 2026, unchanged.
Added¶
- Extract values from the raw channel order XML using
Parent>Child>Leafpaths, up to 8 levels deep. - Key/value lookups through the
WooMeta.,Metafield.,VariationSelectedOption., andNoteAttribute.prefixes. - Five write targets:
ExtendedProperty,InternalNote,ProcessingInternalNote,Note, andProcessingNote. Formatparameter with{{value}}and{{key}}placeholders.Troubleshootflag that logs the full order XML in three parts.- Per-order error handling so one failing order doesn't stop the batch.
Application Store release notes, oldest first¶
- Initial release.
- 0.2: Fixed an error for properties with a leading or trailing space.
- 0.3: Fixed properties with spaces before and after the comma and the child selector.
- 0.4: Bug fix for an empty property.
- 0.5: Saved empty properties as
[Empty]. - 0.6: Stopped saving empty values, on Linnworks' recommendation. A property without a value isn't added.
- 0.7: Fixed a bug where a property wasn't found when the XML contained invalid characters.
- 0.9: Extracted values can be written as internal notes, and the written
text can be extended, the start of the
Formattemplate. - 0.10: Paths up to 5 levels.
- 0.11:
Troubleshootparameter. When true, adds an internal note with the raw XML to send to support. False by default. - 0.12: Fixed an issue where some orders failed to extract their data.
Troubleshootnow logs the XML for a developer instead of adding a note. - 0.13:
Notetarget, a regular, non-internal note. - 0.14: No duplicates. An existing property is updated with the latest value; a note with the same text isn't added again.
- 0.15: Provisional support for WooCommerce metadata, the
WooMeta.prefix. - 0.16:
ProcessingInternalNoteandProcessingNotetargets. - 0.17: Provisional support for Etsy
VariationSelectedOption(beta).