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

Reply via email to