Ich wurde kürzlich in die wunderbare Welt von XPath und XQuery eingeführt. Ich war in der Lage, einige Abfragen mit logischen Operatoren zu konstruieren, aber ich stecke an einem bestimmten Problem fest, für das ich keine Antwort zu finden vermag. Es beinhaltet Attribute, die um ein Tag gewickelt sind.Xpath & Xquery: Auswählen und Zurückgeben von XML-Elementen mit mehreren komplexen Tags
Ich verwende Exide, um ein XML-Dokument zu durchsuchen, und die Struktur sieht nicht aus wie etwas, das ich bei der Recherche gesehen habe. Es sieht aus (etwas) wie folgt aus:
<Report name="Report001">
<ReportDetail name="SubSection1">
<Properties>
<tag name="bar">blue</tag>
<tag name="bar2">green</tag>
<tag name="bar3">yellow</tag>
<tag name="bar4">white</tag>
</Properties>
<ReportItem detail1="some value" detail2="some value" detail3="some value" detail4="some value" detail5="some value">
<item1>foo</item1>
<item2>foo2</item2>
<item3>foo3</item3>
<item4>foo4</item4>
<item5>foo5</item5>
</ReportItem>
</ReportDetail>
<ReportDetail name="SubSection2">
<Properties>
<tag name="bar">blue</tag>
<tag name="bar2">green</tag>
<tag name="bar3">pink</tag>
<tag name="bar4">lime</tag>
</Properties>
<ReportItem detail1="some value2" detail2="some value2"detail3="some value2" detail4="some value2" detail5="some value2">
<item1>foo</item1>
<item2>foo2</item2>
<item3>foo3</item3>
<item4>foo4</item4>
<item5>foo5</item5>
</ReportItem>
</ReportDetail>
</Report>
Was ich versuche zu suchen (und zählen) und dann in einer Abfrage zurückgeben ist diese ReportDetail Namen wo
- Tag-Namen bar2 Spiele
- den Tag selbst enthält (oder gleich) grün
- und item3 gleich foo3
Ich habe versucht, Variationen der folgenden Möglichkeiten: Für die ersten beiden Teile der Abfrage die folgenden Abfragen
count(//Properties/tag[@name='bar2'] | /tag[. ,'green']))
count//Properties/tag[@name='bar2'][. ,'green']))
count(//Properties[contains(@name, "bar2")])
für den dritten Teil der Abfrage denken produziert habe ich es wie eine von ihnen aussehen sollte:
and //ReportItem[item3=foo3])
//ReportItem[item3=foo3]
So ist die gesamte Abfrage würde wie folgt aussehen:
count(//Properties/tag[@name='bar2'] | /tag[. ,'green'] and /ReportItem[item3=foo3)
Bitte stellen Sie wohlgeformte XML-Dokumente (schließen Sie alle Elemente!) Zur Verfügung, die Ihnen nicht helfen, die Eingabe zu korrigieren, bevor sie dies tun können. Auch: Was hast du versucht, wo genau bist du stecken geblieben? Wie lautet die erwartete Ausgabe für die gesuchte Abfrage in den von Ihnen bereitgestellten Eingabedaten? Bitte werfen Sie einen Blick auf [fragen], um zu sehen, was in einer guten Frage enthalten sein sollte. –
Vielen Dank für das Feedback, aktualisiert wie gewünscht. – chrishowden
Ihre XPath-Ausdrücke haben '// HostProperties', aber Ihre XML-Eingabe enthält keine Elemente dieses Namens. –