yetanotheruser: Konvertiere xml in html mit XQuery

Hallo at all,

ich habe ein kleines Problem mit XQuery. Folgende xml-Datei ist gegeben:
*********************

  
<?xml version="1.0"?>  
<text>  
   <untertest>Blabla</untertest>  
   <weiteres>  
      <blub>1234</blub>  
      <blubber>5542</blubber  
   </weiteres>  
</text>  

*********************

Das ganze soll jetzt nach bestimmten Regeln in html konvertiert werden und das ganze mit XQuery.
Z.B. so:
*********************

  
<html>  
   <head>  
      <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">  
      <title>Blabla</title>  
   </head>  
   <body>  
      <h1>Email von Alan Mathison Turing</h1>  
      <hr />  
      <p>1234 , 5542</p>  
   </body>  
</html>  

*********************

Folgendes XQuery habe ich momentan:
*********************

  
xquery version "1.0" encoding "utf-8";  
declare boundary-space preserve;  
  
declare function local:convert-children ($x)  
{  
  for $y in $x/node() return local:convert-node($y)  
};  
  
declare function local:convert-node ($x)  
{  
   typeswitch($x)  
      case element(text) return  
         <html>  
            <head>  
               <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />  
               <title>{data($x/untertest)}</title>  
            </head>  
            <body>  
               <h1>Email von {data($x/absender)}</h1>  
               {local:convert-children($x)}  
            </body>  
         </html>  
      case element(weiteres) return  
         <hr />  
         {local:convert-children($x)}  
      default return ($x)  
};  
  
let $doc := doc("beispiel.xml")  
return local:convert-children($doc)  

*********************

In Beispiel.xml stehen die xml Angaben von weiter oben drin. Wenn ich das ganze z.B. vom XML Spy überprüfen lasse, dann bekomme ich folgenden Fehler:

XQuery Execution Error!
Unexpected Token - {local:convert-children($

Was genau mache ich falsch, bzw. worauf habe ich nicht geachtet?

Gruß Ben

  1. Hallo,

    In Beispiel.xml stehen die xml Angaben von weiter oben drin. Wenn ich das ganze z.B. vom XML Spy überprüfen lasse, dann bekomme ich folgenden Fehler:

    XQuery Execution Error!
    Unexpected Token - {local:convert-children($

    Was genau mache ich falsch, bzw. worauf habe ich nicht geachtet?

    case element(weiteres) return
             <hr />
             {local:convert-children($x)}
          default return ($x)

    falsch ist das <hr />, erwarten wird entweder <hr>{local:convert-children($x)}</hr> oder:

    case element(weiteres) return
             local:convert-children($x)
          default return ($x)

    Du muss irgendwie das <hr /> wo anderes unterbringen.

    Grüße
    Thomas

    1. case element(weiteres) return
               <hr />
               {local:convert-children($x)}
            default return ($x)

      falsch ist das <hr />, erwarten wird entweder <hr>{local:convert-children($x)}</hr> oder:

      case element(weiteres) return
               local:convert-children($x)
            default return ($x)

      Du muss irgendwie das <hr /> wo anderes unterbringen.

      Grüße
      Thomas

      Ich habe das gestern doch noch gelößt, zumindest so, dass es den erwünschten Effekt hatte. Und zwar das <hr /> und {local:convert-children($x)} in () geschrieben und dazu die einzelnen Elemente durch Komma getrennt. Dann nimmt er es. Laut W3C-Grammatik für XQuery sollte das zwar überhaupt nicht gehen, aber es tut es.

      Irgendwie mag ich XQuery nicht.

      Gruß Ben