Ich möchte die Ergebnisse von drei Zip-Filter-Abfragen in einem XML-Baum kombinieren. Die XML-I wie folgt aussieht bin Parsen:Wie kombiniere ich Ergebnisse von Zip-Filter-Abfragen in einer XML-Struktur in Clojure?
<someroot>
<publication>
<contributors>
<person_name>
<surname>Surname A</surname>
</person_name>
<person_name>
<given_name>Given B</given_name>
<surname>Surname B</surname>
<suffix>Suffix B</suffix>
</person_name>
</contributors>
</publication>
</someroot>
Aus diesem Beispiel kann man sehen, dass <given_name>
und <suffix>
optional sind - nur <surname>
erforderlich. Hier in liegt mein Problem - wenn ich laufen drei separate Abfragen die Antworten, die ich miteinander aus dem Gleichgewicht geraten sein bekommen:
(xml-> xml :publication :contributors :person_name :given_name text)
(xml-> xml :publication :contributors :person_name :surname text)
(xml-> xml :publication :contributors :person_name :suffix text)
Nach dem Ausführen dieser drei Abfragen ich mit drei Sequenzen, deren Mächtigkeiten gelassen werden nicht übereinstimmen; given_name
und suffix
wird Länge 1 sein, während surname
wird Länge 2. Dies macht es mir unmöglich, die Komponenten der einzelnen Namen zu kombinieren. Ich muss eine einzelne Abfrage schreiben, die diese Namensverkettung während der Sequenzkonstruktion ausführt.
Ich schaue mir die sehr spärliche Dokumentation für clojure.contrib.zip-filter.xml
an und kann nicht herausfinden, wie ich das machen könnte (oder ob es überhaupt möglich ist). Leider bin ich ein Clojure (und Lisp) Neuling! Kann jemand darauf hinweisen, wie ich eine Abfrage schreiben kann, die drei andere eingebettete Abfragen verketten wird?
prüfen diese letzte Frage sO aus: http://stackoverflow.com/questions/2034550/Rückgabe-Mehrfachwerte-Verwendung-Clojure-Xml-Zipper –