xquery - nodes unterscheiden sich nur durch attribute :-(

Status
Nicht offen für weitere Antworten.

guni

Bekanntes Mitglied
hallo,

kennt sich irgendwer hier gut mit xquery aus?
bin neu in der thematik und hab ein xml mit mitarbeiterdaten einer firma.
das design des xml's ist schrecklich:
[XML]
<record>
<field name="firstname"><string>Brad</string></field>
<field name="lastname"><string>Pitt</string></field>
<field name="employeenumber"><string>123</string></field>
<field name="gender"><string>m</string></field>
</record>
<record>
<field name="firstname"><string>George</string></field>
<field name="lastname"><string>Clooney</string></field>
<field name="employeenumber"><string>456</string></field>
<field name="gender"><string>m</string></field>
</record>
<record>
<field name="firstname"><string>Angelina</string></field>
<field name="lastname"><string>Jolie</string></field>
<field name="employeenumber"><string>789</string></field>
<field name="gender"><string>w</string></field>
</record>
[/XML]
ich brauche irgendeine abfrage in xquery, die ungefähr folgendes macht:

select firstname, lastname, employeenumber
from employees
where firstname in ('Angelina', 'Brad');

bitte um hilfe!
danke.
 
Zuletzt bearbeitet von einem Moderator:

ModellbahnerTT

Bekanntes Mitglied
irgendwie so:

Code:
for $rec in doc("foo.xml")//record
let $first = data($rec/field[@name = "firstname"])
let $last = data($rec/field[@name = "lastname"])
let $num = data($rec/field[@name = "employeenumber"])
where $first = ("Angelina", "Brad")
return ($first, $last, $num)
 

guni

Bekanntes Mitglied
@Modellbahner:
danke! das hat mir schon weitergeholfen.
ganz versteh ich zwar die eckigen Klammern noch nicht, aber das lässt sich ja jetzt über tutorials herausfinden ;-)
 

guni

Bekanntes Mitglied
ok ... jetzt muss ich euch leider nochmal nerven.
ich hab ein ant-Script (xml)
und ich möchte über eine xquery rausfinden welche jars das ding einbindet.
hab bis jetzt folgende query:

Code:
<ul>
{
for    $target in doc("C:\build.xml")/project/target
let    $classpath := $target[@name="compile"]/javac/classpath
let    $jarfile   := data($classpath/pathelement/@location)
return <li>{$jarfile}</li>
}
</ul>

mein output sieht jetzt aber dummerweise so aus:

[XML]<ul>
<li/>
<li/>
<li>${java.lib}/apache-mime4j-0.5.jar ${java.lib}/commons-codec-1.3.jar ${java.lib}/commons-logging-1.1.1.jar ${java.lib}/httpclient-4.0-beta2.jar ${java.lib}/httpcore-4.0-beta3.jar ${java.lib}/httpmime-4.0-beta2.jar</li>
<li/>
<li/>
</ul>[/XML]

wie kann ich denn erreichen,
dass ich
a) jede jar-Datei als list element bekommen
b) den pfad vorne wegschneide

ps.: mein source-xml sieht so aus:
[XML] <target name="compile" depends="init" description="erzeugt die class-Dateien für die Schnittstelle">
<javac srcdir="." includes="**/*.java" destdir="${build.dir}">
<classpath>
<pathelement location="${java.lib}/apache-mime4j-0.5.jar"/>
<pathelement location="${java.lib}/commons-codec-1.3.jar"/>
<pathelement location="${java.lib}/commons-logging-1.1.1.jar"/>
<pathelement location="${java.lib}/httpclient-4.0-beta2.jar"/>
<pathelement location="${java.lib}/httpcore-4.0-beta3.jar"/>
<pathelement location="${java.lib}/httpmime-4.0-beta2.jar"/>
</classpath>
</javac>
</target>[/XML]
 

ModellbahnerTT

Bekanntes Mitglied
Code:
<ul>
{
for $target in doc("C:\build.xml")/project/target
let $classpath := $target[@name="compile"]/javac/classpath
for $location in $classpath/pathelement/@location
return <li>{ substring(data($location),12) }</li>
}
</ul>
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen

Neue Themen


Oben