Announcement

Collapse
No announcement yet.

xquery anwenden

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • xquery anwenden

    Hallo alle zusammen!

    Ich hab leider noch nicht sehr viel mit xml gearbeitet. Ich verwende das Programm Altova XMLSpy. Ich hab eine fertige Xml datei und möchte folgendes tun:

    Ich hab eine Menge an Datensätzen in der folgenden Form:
    <Frame id="frame_0102">
    <Person id="0">
    <BoundingBox top="1" left="243" bottom="90" right="268">
    <Camera id="2"/>
    </BoundingBox>
    </Person>
    <Person id="0">
    <BoundingBox top="0" left="0" bottom="134" right="8">
    <Camera id="3"/>
    </BoundingBox>
    </Person>
    </Frame>

    Meine Frage ist nun: Wie wende ich xquery an, um für Person id= "0" alle Infos zu bekommen, wobei aber noch die Frame id nicht fehlen darf? Am besten wäre es auch noch, wenn ich das in Form einer .txt haben könnte.

    Gibts dazu eine Lösung?

    Vielen Dank und alles Gute
    Mel

  • #2
    //Person[@id = 0] selektiert alle "Person"-Elemente mit der id 0. Per parent::Frame/@id kommt man dann an das id-Attribut des Frame-Elementes, in dem das Person-Element enthalten ist.
    Ansonsten musst du mal genau erklären, was "alle Infos bekommen" meint, also welche Daten in welchem Format du per XQuery zurückgeben willst.

    Comment


    • #3
      Achso, entschuldige Oft ist man beim Denken schneller als beim Schreiben.

      Mit alle Infos meine ich zb
      <BoundingBox top="1" left="243" bottom="90" right="268">
      <Camera id="2"/>

      Also jede BoundingBox top, left, bottom und right; und Camera id von Person id.

      Comment


      • #4
        Ich gebe dir mal ein Beispiel. wenn das XML-Eingabedokument wie folgt ist,
        Code:
        <Root>
        <Frame id="frame_0102">
        <Person id="0">
        <BoundingBox top="1" left="243" bottom="90" right="268">
        <Camera id="2"/>
        </BoundingBox>
        </Person>
        <Person id="0">
        <BoundingBox top="0" left="0" bottom="134" right="8">
        <Camera id="3"/>
        </BoundingBox>
        </Person>
        </Frame>
        </Root>
        dann ergibt folgender XQuery-Code
        Code:
        string-join(
        for $person  in //Person[@id = 0]
        return
          ($person/parent::Frame/@id, $person/@id, $person/descendant::*/@*)/concat(name(..), '.', name(.), ': ', .)
        , '
        ')
        mit AltovaXML Tools und Kommandozeile
        Code:
        AltovaXML.exe /xq query.xq /in file.xml /om text
        folgendes Resultat:
        Code:
        Frame.id: frame_0102
        Person.id: 0
        BoundingBox.top: 1
        BoundingBox.left: 243
        BoundingBox.bottom: 90
        BoundingBox.right: 268
        Camera.id: 2
        Frame.id: frame_0102
        Person.id: 0
        BoundingBox.top: 0
        BoundingBox.left: 0
        BoundingBox.bottom: 134
        BoundingBox.right: 8
        Camera.id: 3
        Das zweite Argument für string-join ist dabei , eventuell wird das durch die Forumsoftware nicht richtig dargestellt.

        Comment


        • #5
          Leider machen Foren wie diese es unmöglich, XML oder XQuery-Code mit Zeichenreferenzen zu posten, das zweite Argument zu string-join ist "& # 1 0;", nur ohne die Leerzeichen zwischen den einzelnen Zeichen.

          Comment


          • #6
            Ok, vielen Dank!

            Ich bin noch ziemlich neu, also wahrscheinlich eine blöde Frage:
            Wie kann ich meine Ergebnisse dann in einem speziellen Format anzeigen lassen, zb in so excel tabellen?

            Lg

            Comment


            • #7
              Excel versteht bzw. hat seit Excel 2003 ein XML-Format, das statt eines .doc Formats verwendet werden kann. Man könnte also mit XQuery ein XML-Dokument im XML-Format erzeugen, das Excel benutzt. Aber dafür muss man das Excel-Format kennen. Du könntest als Einstieg ja mal ein Beispiel-Dokument in Excel erzeugen, im XML-Format speichern und dann das Dokument als Vorlage benutzen.

              Comment

              Working...
              X