PhoenixmlDb.XSLT

XsltTransformProvider

Implements using the public API, enabling fn:transform() from XQuery to run XSLT transformations.

#XsltTransformProvider

Namespace: PhoenixmlDb.Xslt

Implements

using the public

API, enabling fn:transform() from XQuery to run XSLT transformations.

#Properties

Name Description
PreloadedResources Optional pre-fetched contents for URIs that stylesheet-location would otherwise need to fetch over HTTP synchronously. Required on Blazor WebAssembly which cannot block the calling thread for sync HTTP — without this, fn:transform from XQuery hits HttpResourceLoader.GetStringAsync and throws FOXT0001.

#Methods

#ParseResultToXdmAsync(String,PhoenixmlDb.XQuery.INodeStore,String)

Parses a result XML string back to an XDM document node using the context's node store, or returns the string if the node store doesn't support building or the XML is malformed.

#ReanchorCrossStoreResult(Object,PhoenixmlDb.XQuery.INodeBuilder)

Walks the raw result from

TransformToValueAsync

, re-parsing any

wrappers into the caller's

so the returned nodes carry NodeIds that the XQuery side can navigate. Without this, raw-delivery node results reach XQuery anchored to the (now-dying) inner XSLT engine's store; outer-side child navigation,

path()

, and serialization all return wrong/empty values.

Re-parses any

CrossStoreNodeRef

in a raw fn:transform result back into a node in the CALLER's store. Internal, not private, because BOTH fn:transform implementations need it — this provider for XQuery callers and XsltTransformFunction for XSLT ones. It was private and only the XQuery side called it, so a stylesheet calling fn:transform with delivery-format='raw' got the raw wrapper back as an atomic value: $x:result -> CrossStoreNodeRef { Xml = <context-child/>, IsElement = True } which is not a node, so `instance of element(context-child)` was false and every test that navigated the result saw nothing.

#SerializeNode(PhoenixmlDb.Xdm.Nodes.XdmNode,PhoenixmlDb.XQuery.INodeStore)

Serializes an XDM node to XML markup using the node store from the execution context.

#TransformAsync(Collections.Generic.IDictionary<Object,Object>,PhoenixmlDb.XQuery.Ast.ExecutionContext)