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