Extrahieren von Daten aus XML mit Java
Ich habe folgenden XML-code:
<CampaignFrameResponse
xmlns="http://Qsurv/api"
xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<Message>Success</Message>
<Status>Success</Status>
<FrameHeight>308</FrameHeight>
<FrameUrl>http://delivery.usurv.com?Key=a5018c85-222a-4444-a0ca-b85c42f3757d&ReturnUrl=http%3a%2f%2flocalhost%3a8080%2feveningstar%2fhome</FrameUrl>
</CampaignFrameResponse>
Was ich versuche zu tun ist, extrahieren Sie die Knoten aus und ordnen Sie einer Variablen zu. So zum Beispiel, würde ich eine variable namens FrameHeight
mit dem Wert 308
.
Dies ist der Java-code habe ich bisher:
private void processNode(Node node) {
NodeList nodeList = node.getChildNodes();
for (int i = 0; i < nodeList.getLength(); i++) {
Node currentNode = nodeList.item(i);
if (currentNode.getNodeType() == Node.ELEMENT_NODE) {
//calls this method for all the children which is Element
LOG.warning("current node name: " + currentNode.getNodeName());
LOG.warning("current node type: " + currentNode.getNodeType());
LOG.warning("current node value: " + currentNode.getNodeValue());
processNode(currentNode);
}
}
}
Dieser druckt den node-Namen, - Typen und-Werte, aber was ist der beste Weg der Zuordnung der einzelnen Werte, um eine entsprechend benannte variable? zB int FrameHeight = 308
?
Dies ist meine aktuelle code, wo die nodeValue-variable hält null zurückgeben:
processNode(Node node) {
NodeList nodeList = node.getChildNodes();
for (int i = 0; i < nodeList.getLength(); i++) {
Node currentNode = nodeList.item(i);
if (currentNode.getNodeType() == Node.ELEMENT_NODE) {
//calls this method for all the children which is Element
String nodeName = currentNode.getNodeName();
String nodeValue = currentNode.getNodeValue();
if(nodeName.equals("Message")) {
LOG.warning("nodeName: " + nodeName);
message = nodeValue;
LOG.warning("Message: " + message);
}
else if(nodeName.equals("FrameHeight")) {
LOG.warning("nodeName: " + nodeName);
frameHeight = nodeValue;
LOG.warning("frameHeight: " + frameHeight);
}
processNode(currentNode);
}
}
}
InformationsquelleAutor Victoria | 2012-10-11
Du musst angemeldet sein, um einen Kommentar abzugeben.
Xstream nicht unterstützen, in Ihrem Fall, kann es verwendet werden, für konvertieren Objekt in xml dann wieder zurück Holen. Wenn Ihr xml-erzeugt eine Instanz der CampaignFrameResponse Klasse, kann u verwenden xstream.
Ansonsten einfach schauen, wie
Müssen Sie analysieren, wenn Sie brauchen int-Wert.
InformationsquelleAutor vels4j
Können Sie
DOM
,SAX
,Pull-Parser
, aber dann gut zu gehen mit den folgenden APIs.-
JAXP & JAXB
-
Castor
Z.B.: DOM-PARSING
InformationsquelleAutor Kumar Vivek Mitra
Habe ich die Arbeit mit XML in Java für eine Weile (über zehn Jahre) und habe versucht, viele alternativen (benutzerdefinierten text-parsing, proprietären APIs, SAX, DOM, Xmlbeans, JAXB, etc.). Ich habe gelernt, ein paar Dinge:
Knowadays ich Neige dazu, verwenden Sie code-Generierung, wenn ich parse XML so. Der Standard für, die ist JAXB (xmlbeans ist tot, und andere alternativen können nicht als reif oder als wideley verwendet). In deinem Fall würde ich definieren, eine XSD definiert, dass das Dokument in so feinen Details wie möglich (d.h., wenn Sie eine Zeichenfolge verwenden, können nur mehrere Werte, nicht verwenden "xs:string" Typ, aber ein aufgezählter). Es könnte wie folgt Aussehen:
Nun ist es eine Frage der Verwendung von JAXB-tools (siehe xjc compiler-Optionen) zum generieren von code und sehen Sie ein paar Beispiele darüber, wie Marschall/unmarshal die generierten Java-Beans von/zu XML.
InformationsquelleAutor Fernando Miguélez
Könnte man natürlich erstellen Sie ein name-Wert-Karte und aktualisieren Sie die Karte, während Sie sich durch die XML. Am Ende der Analyse kann man sich für die jeweilige Taste in der Karte. Java erlaubt nicht das erstellen von Variablen programmgesteuert, so dass Sie nicht in der Lage sein, eine variable erzeugen, deren name basiert auf der XML-Daten.
Andere als auf den Stil und die Lesbarkeit, ist Ihre Entscheidung zum Auffüllen von Daten-Strukturen aus XML-hängt davon ab, wie gut definiert die XML ist und wie viel würde das schema, könnte möglicherweise in Zukunft ändern. Man könnte sich Fragen, Fragen wie : Kann die node-Namen in Zukunft ändern? Können XML-Unterabschnitte eingeführt werden, würde die Grenzen dieses Abschnitts? Dies könnte helfen, Sie wählen einen bestimmten parser (SAX/DOM-oder höheren-Ebene Objekt-parsing APIs).
Natürlich, wenn Sie keine Kontrolle über die XML-definition ist, gibt es wenig Sie tun können, zu anderen als zu analysieren, was du hast.
InformationsquelleAutor argmin
Schlage ich vor, - x-stream.github.io - mit einigen Abgrenzung annotation können Sie erstellen-Objekt von XML sehr schnell mit sehr wenig Codierung.
InformationsquelleAutor urir
Ich würde nicht vorschlagen, die zum analysieren der xml direkt (es sei denn, Sie werden dazu gezwungen), sondern in einer externen Bibliothek, wie http://x-stream.github.io/. Die Idee ist, dass Sie erstellen ein Objekt repräsentiert xml-schema und die Bibliothek füllt das Objekt für Sie.
InformationsquelleAutor acerisara