2009-10-01 9 views
5

मेरा एप्लिकेशन कई एक्सएमएल स्रोतों से एक वेबपृष्ठ मॉडल तैयार करता है। इन स्रोतों को सामान्य Xerces पार्सर के साथ डीओएम ऑब्जेक्ट्स के रूप में स्मृति में पार्स किया जा रहा है। दुर्भाग्य से, Xerces DOM ऑब्जेक्ट्स थ्रेड केवल पढ़ने के लिए सुरक्षित हैं। मैं पढ़ने के लिए पार्सड डोम का पुन: उपयोग करने में सक्षम होना चाहता हूं। क्या किसी को भी डीओएम कार्यान्वयन पढ़ने के लिए एक और पार्सर या एक साधारण धागा सुरक्षित पता है?एक डीओएम बनाना जो पढ़ने के लिए थ्रेड सुरक्षित है

उत्तर

0

मुझे कोई सही और सरल समाधान नहीं पता है।

एक विचार हो सकता है कि थ्रेड-सुरक्षित ऑब्जेक्ट्स का उपयोग कर डोम को फिर से बनाएं।

इस मामले में, वे अपरिवर्तनीय होंगे, जैसा कि आप केवल पढ़ने के लिए हैं। अपरिवर्तनीय होने के कारण आगे के सुधारों के लिए संभावनाएं खुलती हैं (उदाहरण के लिए उदाहरण साझा करना, जो छोटी स्मृति पदचिह्न का कारण बनता है)।

काश मैं, कि यह करता है एक पुस्तकालय का सुझाव सकता है के रूप में यह कोडिंग भी पर्याप्त मात्रा में है ...

4

सैक्सन अपने आंतरिक और अपरिवर्तनीय डेटा संरचना करने के लिए डोम रैपर प्रदान करता है।

// 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; 

(के साथ परीक्षण किया सैक्सन-वह 9.5.1)

संबंधित मुद्दे