generische foreach-iteration NamedNodeMap
In Java, mit Blick auf die NamedNodeMap - Schnittstelle, wie Sie die Iteration mit Generika? Es scheint Node benutzen anstatt als String, aber ich bin nicht so sicher über die Verwendung von Node-Objekten...
NamedNodeMap namedNodeMap = doc.getAttributes();
Map<String, String> stringMap = (Map<String, String>) namedNodeMap;
for (Map.Entry<String, String> entry : stringMap.entrySet()) {
//key,value stuff here
}
Ja, ich kann sehen, wie die Iteration ohne die Verwendung von Generika und mit einer regulären for-Schleife, aber ich würde gerne die oben genannten ?idiom? für Karten. Natürlich, das problem scheint zu sein, dass, trotz des namens, NamedNodeMap nicht wirklich Implementierung der Map-Schnittstelle! 🙁
Denke, man muss einfach nur den sauren Apfel beißen hier und tun so etwas wie:
/*
* Iterates through the node attribute map, else we need to specify specific
* attribute values to pull and they could be of an unknown type
*/
private void iterate(NamedNodeMap attributesList) {
for (int j = 0; j < attributesList.getLength(); j++) {
System.out.println("Attribute: "
+ attributesList.item(j).getNodeName() + " = "
+ attributesList.item(j).getNodeValue());
}
}
es gibt nichts schöneres?
InformationsquelleAutor der Frage Thufir | 2010-11-13
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich glaube nicht, dass es ein schöner Weg mit diesen APIs.
Bedenken, dass das W3C DOM Java-APIs wurden vorher angegeben hatte Java generics oder die neue
for
syntax, oder auch dieIterator
- Schnittstelle. Bedenken Sie auch, dass die W3C DOM APIs für Java sind tatsächlich das Ergebnis der mapping-eine IDL-Spezifikation zu Java.Wenn Sie wollen schöner APIs für die XML-Bearbeitung, etc. im Speicher, vielleicht sollten Sie bei JDOM.
InformationsquelleAutor der Antwort Stephen C
Können Sie erstellen Sie Ihre eigenen
Iterable
wrapper fürNamedNodeMap
und dann in einer foreach Schleife.Dies könnte beispielsweise eine einfache Implementierung:
In diesem Fall wäre die Verwendung:
Mit einem ähnlichen Ansatz könnte man erstellen Sie eine
Iterable
überMap.Entry<String, String>
Instanzen.InformationsquelleAutor der Antwort Paolo Fulgoni
Als Sie kann nicht wirken, NamedNodeMap zu einem Anzeigenschlage ich vor, um eine Schleife mit einer klassischen for-Schleife wie :
InformationsquelleAutor der Antwort Charles Follet