Interpretieren Sie eine Regel mehr XPath-Abfragen auf mehrere XML-Dokumenten Anwendung
-
21-09-2019 - |
Frage
Ich brauche eine Komponente zu erstellen, die ein paar XML-Dokumente in der Eingabe nehmen und überprüfen Sie die folgende Art von Regeln:
XML1:/bookstore/book[price>35.00] != null
and (XML2:/city/name = 'Montreal'
or XML3://customer[@language] contains 'en')
Grundsätzlich sollte meine Komponente der Lage sein:
- ersetzt die XML-Token mit dem entsprechenden XML-Dokument (vor Kolon)
- anwenden XPath-Abfrage auf diesem XML-Dokument
- überprüfen Sie den XPath-Ausgang gegen erwartetes Ergebnis ( "=", "! =", "Enthält")
- folgt der grundlegende Syntax ( "und", "oder" und Klammern)
- sagen, ob die Regel wahr oder falsch ist
Kennen Sie eine Bibliothek, die mir helfen könnte? vielleicht JavaCC?
Danke
Lösung 2
Jemand auf der JavaCC Mailingliste wies mich in die richtige Richtung, zu erwähnen Schematron . Es führte mich zu Probatron , welche die beste Java-Implementierung zur Verfügung zu sein scheint.
Schematron Website behauptet, dass die Sprache unterstützt „Sprung über Links und zwischen XML-Dokumenten Einschränkungen zu überprüfen“, aber es scheint, dass Probatron nicht gestattet. Ich kann es nicht zwicken oder einen Trick dafür (wie der Aufbau ein temporäres XML-Dokuments enthält alle meine Quelldokumente) finden. Abgesehen davon sieht es Probatron die richtige Bibliothek für mich ist.
Andere Tipps
Für XPATHs Auswertung Ich empfehle Jaxen .
Jaxen ist eine Open-Source-XPath-Bibliothek in Java geschrieben. Es ist anpassungsfähig an viele verschiedene Objektmodelle, einschließlich DOM, XOM, dom4j und JDOM. Ist es auch möglich, Schreib Adapter dass treat Nicht-XML-Strukturen wie kompilierten Java-Byte-Code oder Javabeans wie XML, so dass Sie damit zu Abfrage diese Bäume mit XPath zu.
Die Java XPath API ( Java 5 / javax.xml.xpath ) ist auch eine Option, aber ich habe es noch nicht ausprobiert.