I've tried with a number of variations. As far as a self-contained example, I'm not exactly sure what you're looking for, but suppose I have in C:\data\input.xml:
<?xml version="1.0" encoding="UTF-8"?>
<input>
<pages>
<page>
<lbl>Sample Page</lbl>
<list>
<unlt>
<lbl>Summer Unit</lbl>
<partinfo>
<number>54321</number>
<manuf>A321</manuf>
</partinfo>
<partinfo>
<number>12345</number>
<manuf>B123</manuf>
</partinfo>
<offer>25% off!</offer>
</unlt>
</list>
</page>
</pages>
<parts>
<part>
<partinfo>
<number>54321</number>
<manuf>A321</manuf>
</partinfo>
<color>Orange</color>
</part>
<part>
<partinfo>
<number>12345</number>
<manuf>B123</manuf>
</partinfo>
<color>Pink</color>
</part>
</parts>
</input>
And suppose I have in C:\scripts\query.xq:
let $map := map:merge(
for $part in //part
return map:entry(string-join($part/partinfo/*, '/'), $part)
)
for $page in //page
let $new-part := $page update {
for $partinfo in .//unit/partinfo
let $part := $map(string-join($partinfo/*, '/'))
return replace node $partinfo with element part {$part/node()}
}
return file:write('/data/'|| $page/@key || '.xml', $new-part,
map{"omit-xml-declaration":"no"})
And suppose my current directory is C:\scripts. If I launch the command:
"\Program Files (x86)\BaseX\bin\basex" query.xq -iC:/data/input.xml
I get in response:
Stopped at C:/scripts/query.xq, 2/19:
[XPDY0002] root(): no context value bound.
It's the same whether I say
-iC:/data/input.xml
-i/data/input.xml
-iC:\data\input.xml
-i\data\input.xml
Thanks,
Michael