Ich muss eine Java-Anwendung schreiben, die eine Stichwortsuche innerhalb der Tags und der eigentlichen Daten aus vielen Xml-Dateien durchführt. Nach meinen Recherchen im Internet habe ich das Gefühl, dass ich xalan verwenden muss, aber ich kann nicht herausfinden, wie man es verwendet oder was es tut. Könnte mir jemand die richtige Richtung weisen? Vielen Dank
Antworten
Zu viele Anzeigen?Als Erstes müssen Sie entscheiden, welche Daten Sie tatsächlich suchen wollen. Sie sagen "innerhalb der Tags und der eigentlichen Daten" - bedeutet das, dass Sie eine Schlüsselwortsuche nach einem Elementnamen durchführen werden? Oder nach einem Elementnamen und dem darin enthaltenen Inhalt?
Je nachdem, wie komplex Ihre Suchanfragen sind, werden Sie sich wahrscheinlich an eine echte Suchmaschine wenden wollen, wie z. B. Lucene . Ich möchte jedoch darauf hinweisen, dass Sie sich vor diesem Schritt genau überlegen müssen, wie Sie suchen wollen, damit Sie einen geeigneten Index erstellen können.
Wenn Ihre Suchanforderungen einfacher sind, können Sie die Dokumente in ein DOM laden und mit XPath . Ich würde vorschlagen, dies auszuprobieren, bevor Sie zu Lucene wechseln.
Sie brauchen Xalan nicht; das JDK wird mit XML-Parsern und einem XPath-Evaluator geliefert. Ich habe ein paar Artikel über deren Verwendung geschrieben: ( Parsing ), ( xpath ).
Xalan ist ein XSLT Prozessor: Er ermöglicht es Ihnen, ein XSL-Stylesheet zu schreiben, das Ihr XML-Quelldokument in etwas anderes umwandelt.
Sicher können Sie eine XSL-Transformation schreiben und dann das Ergebnis der Transformation suchen.
Eine andere Möglichkeit ist, das Dokument mit einem XML-Parser zu parsen und dann die Lucene : siehe Parsing, Indizierung und Suche von XML-Dokumenten mit Digester und Lucene .
Sie können auch Folgendes verwenden XPath . Es hängt alles davon ab, was genau Sie erreichen wollen.
Es klingt, als ob Sie nach einer XPath-Implementierung für Java suchen. Damit können Sie einen Suchausdruck erstellen und ihn auf ein oder mehrere XML-Dokumente anwenden (die im Allgemeinen geparst worden sein müssen). Xalan ist eine Möglichkeit, aber es gibt auch andere. Java-Versionen ab Java 5 haben XML-Parsing- und XPath-Funktionen integriert. Wenn Sie eine aktuelle Java-Version verwenden und einfach nur eine Reihe von XML-Dokumenten parsen und durchsuchen möchten, benötigen Sie wahrscheinlich nichts weiter als das Java SDK.
In diesem Artikel finden Sie einen guten (wenn auch etwas veralteten) Überblick über die XPath-Fähigkeiten, die "out of the box" zur Verfügung stehen: http://www.ibm.com/developerworks/library/x-javaxpathapi.html
Ver dieser SO-Posten wie man eine Suche über die contains()
XPath-Funktion.
Als Beispiel für die Durchführung einer XPath-Abfrage schlage ich vor, dass Sie sich die Java XPath-Dokumentation . Hier ist der Beispielcode, den sie zur Verfügung stellen:
XPath xpath = XPathFactory.newInstance().newXPath();
String expression = "/widgets/widget";
InputSource inputSource = new InputSource("widgets.xml");
NodeSet nodes = (NodeSet) xpath.evaluate(expression, inputSource, XPathConstants.NODESET);
Dies würde die Datei widgets.xml
und geben eine NodeSet
aller Knoten, die dem Ausdruck entsprechen.