Thanks. Here’s one way to do it:
let $body := document {
<json type="object">
<result type="array">
<_ type="object">
<id>ba03177</id>
<score type="number">0.83175087</score>
<metadata type="object">
<genre>ba</genre>
<blatt>1810-40</blatt>
<autor>Heinrich von Kleist</autor>
<titel>Die heilige Cäcilie</titel>
<link>
https://kleist-digital.de/...</link>
<text>Die Aebtissinn, ...</text>
</metadata>
</_>
</result>
</json>
}
return <div>
<ul>{
for $result in $body/json/result/_
return <ul>{
for $field in ('Score', 'Blatt', 'Autor', 'Titel', 'Text', 'Link')
return <li>
<span>{ $field }: </span>
<span>{ data($result//*[name() = lower-case($field)]) }</span>
</li>
}</ul>
}</ul>
</div>
Another one is…
return <div>
<ul>{
for $result in $body/json/result/_
return <ul>{
for $text in $result//text()
let $field := name($text/..)
return <li>
<span>{ $field ! (upper-case(substring(., 1, 1)) || substring(., 2)) }: </span>
<span>{ $text }</span>
</li>
}</ul>
}</ul>
</div>
…but of course you can also output only the relevant fields.
Hope this helps,
Christian