Meine Anwendung erstellt ein Webseitenmodell aus einer Anzahl von XML-Quellen. Diese Quellen werden als DOM-Objekte mit dem normalen Xerces-Parser in den Speicher geparst. Leider sind Xerces-DOM-Objekte nicht Thread-sicher für schreibgeschützte Operationen. Ich möchte das geparste DOM zum Lesen wiederverwenden können. Kennt jemand einen anderen Parser oder einen einfachen thread sicheren Thread für die gelesene DOM Implementierung, die ich verwende?Erstellen eines Thread-sicheren DOM für Lesevorgänge
5
A
Antwort
0
Ich kenne keine perfekte und einfache Lösung.
Eine Idee könnte zu die Dom mit thread-safe Objekte erstellen. In diesem Fall wären sie vorzugsweise unveränderlich, wie Sie nur lesen. Die Unveränderlichkeit eröffnet auch Möglichkeiten für weitere Verbesserungen (zum Beispiel die gemeinsame Nutzung von Instanzen, die zu einem geringeren Speicherbedarf führen würde).
Ich wünschte, ich könnte eine Bibliothek vorschlagen, dass dies der Fall ist, da es eine angemessene Menge an Codierung ist ...
4
Saxon bietet DOM-Wrapper seine internen und unveränderliche Datenstruktur.
// create Saxon IdentityTransformer
final Transformer transformer = new TransformerFactoryImpl().newTransformer();
// set up holder for the output
final TinyBuilder outputTarget = new TinyBuilder(
new PipelineConfiguration(new Configuration()));
// transform into Saxon's immutable TinyTree
transformer.transform(xml, outputTarget);
// extract the whole XML as TinyNode
final TinyNodeImpl tinyNode = outputTarget.getTree().getNode(0);
// wrap TinyNode as DOM
final NodeOverNodeInfo nodeOverNodeInfo = DocumentOverNodeInfo.wrap(tinyNode);
// cast to DOM
final Document doc = (Document) nodeOverNodeInfo;
(getestet mit sächsisch-er 9.5.1)
Verwandte Themen
- 1. Erstellen eines threadsicheren temporären Dateinamens
- 2. JQuery fadeIn() beim Erstellen eines DOM-Elements?
- 3. Verwenden Sie SqlTransaction & IsolationLevel für längere Lesevorgänge?
- 4. Aufwand zum Schreiben eines threadsicheren C++ - Wrappers von C API
- 5. Gleichzeitige Lesevorgänge mit SQLFileStream?
- 6. Erstellen einer DOM-NodeList
- 7. Wie kann ich Lesevorgänge zwischenspeichern?
- 8. Erstellen eines SVG-DOM-Elements aus einem String
- 9. Automatisches Erstellen eines DOM-Baumdiagramms aus der HTML-Datei
- 10. jQuery: Erstellen eines neuen DOM-Elements und Anzeigen
- 11. Erstellen eines dom-Objekts im laufenden Betrieb mit Aurelia
- 12. Erkennen eines Inline-/Blocktyps eines DOM-Elements
- 13. Mehrere Lesevorgänge mit Network LocationProvider
- 14. erstellen DOM-Element mit jQuery
- 15. Warum sind logische Lesevorgänge für Fenster-Aggregatfunktionen so hoch?
- 16. In Django, wie wiederholbare Lesevorgänge für eine Transaktion zu erreichen?
- 17. Ansichtsprozentsatz eines DOM-Elements prüfen
- 18. Erstellen eines Datums für getRequestedUpdateDateWithHandler:
- 19. Erstellen eines Fenstermanagers für Linux
- 20. Erstellen eines Formulars für HTML
- 21. Erstellen eines HashSet für Doubles
- 22. Wie erstelle ich in Java einen threadsicheren Einmallesewert?
- 23. Was ist attribute.spezifiziert für die Attribute eines DOM-Elements?
- 24. Wie Phantom-Lesevorgänge in Postgres verhindern?
- 25. Lange Lesevorgänge von der Datei umkehren?
- 26. Read Committed Vs wiederholbare Lesevorgänge in MySQL?
- 27. IE Unterstützung für DOM importNode
- 28. Javascript DOM-Baum doppelt für Manipulation
- 29. Reagieren - Erstellen von Dom aus einfachen Objektbaum
- 30. Software zum Erstellen von DOM/CSS-Klassenreferenzen