stax - get xml node als string
xml sieht so aus:
<statements>
<statement account="123">
...stuff...
</statement>
<statement account="456">
...stuff...
</statement>
</statements>
Bin ich mit stax verarbeiten, die man "<statement>
" zu einer Zeit, und ich habe, dass die Arbeit. Ich müssen zu bekommen, dass die gesamte Aussage Knoten als string, so kann ich schaffen "123.xml" und "456.xml" oder vielleicht sogar laden Sie in eine Datenbank-Tabelle indiziert Konto.
mit diesem Ansatz: http://www.devx.com/Java/Article/30298/1954
Bin ich auf der Suche etwas wie das hier tun:
String statementXml = staxXmlReader.getNodeByName("statement");
//load statementXml into database
Was ist Ihre Frage genau?
InformationsquelleAutor Jason | 2010-12-04
Du musst angemeldet sein, um einen Kommentar abzugeben.
Warum nicht einfach verwenden von xpath für diese?
Könnten Sie haben eine ziemlich einfache xpath-um alle 'Aussage' Knoten.
Etwa so:
EDIT #1: Wenn möglich, nehmen Sie einen Blick auf dom4j. Sie konnte Lesen, Sie die Zeichenfolge und alle 'Aussage' Knoten ziemlich einfach.
EDIT #2: Mit dom4j, dies ist, wie Sie es tun würde:
(aus Ihrem Kochbuch)
Das poster explizit erwähnt, StAX, also ich glaube nicht, dass Zeiger auf dom4j oder eine andere Bibliothek, half ihm nicht viel...
Da die OP noch nie eine Frage gestellt hat, den Vorschlag zu xPath ist so gut wie alles. Vielleicht besser.
InformationsquelleAutor javamonkey79
Ich hatte eine ähnliche Aufgabe und auch wenn die ursprüngliche Frage ist älter als ein Jahr, ich konnte Sie nicht finden, eine befriedigende Antwort. Die interessanteste Antwort bis jetzt war Blaise Doughan Antwort, aber ich konnte es nicht läuft auf dem XML, das ich erwarte (vielleicht einige Parameter für die zugrunde liegenden parser könnte das ändern?). Hier die XML -, sehr vereinfachte:
Meine Lösung:
Beispiel:
Beachten Sie, dass die extrahierten XML-fragment enthält die vollständige extrahierten Textinhalt, einschließlich Leerzeichen und Kommentare. Filtern diese auf Nachfrage oder machen Sie die Puffergröße parametrizable ausgelassen wurden für die code-Kürze:
Ich bekomme den string als <, ['3.0example.com/']::version>3.0</version>
Ich bin mir nicht sicher, ob ich Ihre Frage verstehe, was namespace? Können Sie ein Beispiel geben?
InformationsquelleAutor t0r0X
Können Sie verwenden, StAX. Sie müssen nur vorher der XMLStreamReader, um das start-element für die Erklärung. Überprüfen Sie den account-Attribut um den Namen der Datei. Dann verwenden Sie die javax.xml.verwandeln APIs transformieren die StAXSource ein StreamResult die Verpackung einer Datei. Dies wird Voraus der XMLStreamReader und dann wiederholen Sie einfach diesen Prozess.
Wenn ich den obigen code, ich erhalte die folgende Fehlermeldung Exception in thread "main" net.sf.saxon.trans.XPathException: org.w3c.dom.DOMException: HIERARCHY_REQUEST_ERR: Ein Versuch wurde gemacht, um einen Knoten einzufügen, wo es nicht erlaubt ist. Irgendeine Idee?
InformationsquelleAutor Blaise Doughan
Stax ist ein low-level-Zugriff API, und es muss nicht entweder-lookups oder Methoden, die den Zugriff auf Inhalte rekursiv. Aber was Sie tatsächlich versuchen zu tun? Und warum sind Sie erwägen den Stax?
Darüber hinaus mit einem tree model (DOM, XOM, JDOM, Dom4j), die gut funktionieren würde mit XPath, die beste Wahl beim Umgang mit Daten ist in der Regel data-binding-Bibliothek, wie JAXB. Mit ihm können Sie pass Stax oder SAX-reader und bitten Sie Sie, binden der xml-Daten in Java beans und anstelle von messing mit xml-Prozess von Java-Objekten. Dies ist oft bequemer, und es ist in der Regel ziemlich Leistung.
Nur den trick mit größeren Dateien ist, dass Sie nicht wollen, zu binden, das ganze Ding auf einmal, sondern binden jedes sub-Baum (in deinem Fall eine "Anweisung" zu einer Zeit).
Dies ist am einfachsten getan, indem Sie die Iteration von Stax XmlStreamReader, dann mit JAXB zu binden.
InformationsquelleAutor StaxMan
Ich habe schon gegoogelt, und dies scheint schmerzhaft, schwierig.
da meine xml-ich denke, es ist vielleicht nur einfacher an:
InformationsquelleAutor Jason