2008-10-10 19 views
5

मैं एक ऐसा उपकरण बना रहा हूं जो गतिशील रूप से जेनरेट किए गए एक्सएचटीएमएल की जांच करेगा और अपेक्षित सामग्री के विरुद्ध इसे सत्यापित करेगा।सर्वर-साइड सीएसएस चयनकर्ता

मुझे यह पुष्टि करने की आवश्यकता है कि संरचना सही है और विशिष्ट विशेषताएँ मौजूद हैं/मिलान। ऐसे अन्य गुण हो सकते हैं जिनमें मुझे रूचि नहीं है, इसलिए प्रत्यक्ष स्ट्रिंग तुलना उपयुक्त नहीं है।

यह सत्यापित करने का एक तरीका XPath के साथ है, और मैंने इसे पहले ही कार्यान्वित किया है, लेकिन मुझे कुछ कम वर्बोज़ भी पसंद आएगा - मैं सीएसएस चयनकर्ताओं का उपयोग करने में सक्षम होना चाहता हूं, जैसे कि मैं jQuery के साथ कर सकता हूं, लेकिन सर्वर पर - सीएफएमएल कोड के भीतर - ग्राहक के विरोध में।

क्या कोई सीएफएमएल या जावा लाइब्रेरी है जो मुझे एक्सएचटीएमएल स्ट्रिंग के खिलाफ सीएसएस चयनकर्ताओं का उपयोग करने की अनुमति देती है?

उत्तर

7

मैंने अभी एक ओपन सोर्स प्रोजेक्ट जारी किया है जो जावा में डब्ल्यू 3 सी सीएसएस चयनकर्ता स्तर 3 कार्यान्वयन है। कृपया इसे एक कोशिश का मौका दीजिए। मैं एक ही चीज़ की तलाश में था और अपने इंजन को लागू करने का फैसला किया। यह वेबकिट आदि में कोड से प्रेरित है।

http://github.com/chrsan/css-selectors/tree

+0

धन्यवाद Christer। मुझे अभी तक उस परियोजना पर वापस आने का मौका नहीं मिला है जिसके लिए मुझे इसकी आवश्यकता है, लेकिन ऐसा लगता है कि मैं वास्तव में क्या चाहता हूं - मैं इस सप्ताह कुछ बिंदु पर एक नज़र डालूंगा, और आपको कोई प्रतिक्रिया दे सकता हूं। –

+0

यह बहुत अच्छा लग रहा है! मैं आपकी लाइब्रेरी को [jOOX] में एकीकृत करने पर विचार कर सकता हूं (http://code.google.com/p/joox/) –

2

मुझे जावा लाइब्रेरी के बारे में पता नहीं है, लेकिन एक रूबी लाइब्रेरी है जिसे Hpricot कहा जाता है जो वास्तव में आप जो खोज रहे हैं वह करता है। जावा प्लेटफ़ॉर्म पर रूबी कार्यान्वयन के साथ, JRuby, यह आपके जावा कोड से रूबी विधियों को कॉल करने के लिए अपेक्षाकृत सरल होना चाहिए (बीएसएफ, JSR-222 Scripting APIs, या an internal API का उपयोग करके)।

क्या आप कोल्डफ्यूजन 8 का उपयोग कर रहे हैं? कोल्डफ्यूजन 8, जावा 6 पर आधारित है, जेएसआर -222 स्क्रिप्टिंग एपीआई "javax.scripting" का समर्थन करता है।

this blog entry on embedding PHP within CFML पर एक नज़र डालें। आपको रूबी के साथ ऐसा करने में सक्षम होना चाहिए। इस ब्लॉग पोस्टिंग से जुड़ा ज़िप फ़ाइल उदाहरण कोड है, और यदि आप सीएफएमएल खोलते हैं, तो आपको सीएफएमएल के भीतर रूबी एम्बेड करने का एक अच्छा उदाहरण दिखाई देगा।

हालांकि यह सभी टुकड़ों को एक साथ काम करने के लिए थोड़ा सा काम ले सकता है, लेकिन थोड़ा सा निवेश के साथ, आपको आपको मजबूत पार्सिंग/सीएसएस चयनकर्ता पूछताछ करना चाहिए जिसे आप ढूंढ रहे हैं।

0

सर्वर और क्लाइंट के बीच एक सैद्धांतिक अंतर है। एक वेब ब्राउज़र के लिए, दस्तावेज़ एक जीवित डोम पदानुक्रम है। आपके सर्वर कोड में यह केवल किसी भी प्रकार का एक्सएमएल दस्तावेज है। XPath एक XML दस्तावेज़ के तत्वों तक पहुंचने का "सही" तरीका है।

तो जब तक कि आपके वर्तमान XPath समाधान के साथ गंभीर प्रदर्शन समस्या न हो, या यह वास्तव में सही तरीके से काम नहीं करता है, तो मेरा सुझाव है कि आप इसके साथ चिपके रहें। कुछ चालाक कोशिश कर रहा है जो काम कर रहा है तोड़ने का खतरा लाता है।

यदि आप पाते हैं XPath भी वर्बोज़ और बदसूरत के चारों ओर बैठे छोड़ देते हैं, या चाहते हैं कि करने के लिए विभिन्न मामलों में उपकरण का फिर से उपयोग और अधिक शक्ति होने के लिए, या बस कुछ चालाक तो आपको बस इतना करना, कोशिश नहीं कर विरोध कर सकते हैं एक उपयोगिता लिखने का प्रयास कर सकता है जो किसी दिए गए सीएसएस चयनकर्ता को XPath में संकलित करता है। जब भी आपको आवश्यकता हो तो आप इसे एक पंक्ति में कॉल कर सकते हैं।

+0

xml! = Html। आप xpath – Shawn

+0

एक्सएचटीएमएल के साथ एचटीएमएल को विश्वसनीय रूप से पार्स नहीं कर सकते हैं, अगर यह मान्य है, तो एक्सएमएल का सबसेट है। सवाल स्पष्ट रूप से कहा गया था कि यह एक्सएचटीएमएल था जो वे उत्पन्न कर रहे थे। –

+0

@ शॉन मैं हमेशा डीओएम बनाने वाले पुस्तकालयों का उपयोग करके XPath के साथ HTML को पार्स करता हूं। क्या आप वैध HTML का उदाहरण प्रदान कर सकते हैं जिसे पार्स नहीं किया जा सकता है? –

2

एचपीरिकॉट निश्चित रूप से एक शानदार समाधान है यदि JRuby-मार्ग आपके लिए खुला है।

Wrt। XPath XML दस्तावेज़ों तक पहुंचने का "सही" तरीका है ... क्षमा करें लेकिन यह बकवास है। एक्सएमएल दस्तावेज़ के तत्वों तक पहुंचने के कई तरीके हैं: डीओएम ट्रैवर्सल, एक्सपीएथ, एक्सक्वियर, सीएसएस चयनकर्ता कुछ नाम। XPath निश्चित रूप से लोकप्रिय है लेकिन सीएसएस चयनकर्ता बहुत शक्तिशाली हैं, मानते हैं कि आपके एक्सएमएल दस्तावेज़ में एचटीएमएल अर्थशास्त्र है।

+0

परेशानी यह है कि hpricot मूल पार्सर पर आधारित है, यह सुनिश्चित नहीं है कि यह jRuby में चलाने के लिए कितना आसान होगा। –

+0

हैप्रिकोट जेआरबी के अंदर ठीक है क्योंकि लेखकों ने देशी पार्सर का जावा-कार्यान्वयन बनाया है। – Ijonas

2

आप (जैसा कि ऊपर उल्लेख) अपने CFML भीतर पीएचपी उपयोग कर सकते हैं, तो आप इस उत्कृष्ट "PHP के लिए jQuery" पुस्तकालय का लाभ ले सकता है, phpQuery

पूर्ण CSS चयनकर्ता समर्थन, जोड़-तोड़ काम करता है, ट्रैवर्सिंग इत्यादि। आपको जो चाहिए वह इसके लिए बहुत अच्छा काम करना चाहिए।

उम्मीद है कि यह मदद करता है।

0

cQuery.com का उपयोग करना आसान हो सकता है - cQuery.com सीएसएस का उपयोग करके लाइव वेबसाइटों से सामग्री निकालने के लिए एक एपीआई आधारित 'सामग्री क्वेरी इंजन' है।

आप इसे प्रोग्राम में प्रोग्रामिक रूप से उपयोग कर सकते हैं।

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