2008-08-28 11 views
5

मैं विभिन्न ब्लॉगों से कुछ HTML लाने की कोशिश कर रहा हूं और देखा है कि विभिन्न प्रदाता अलग-अलग तरीकों से एक ही टैग का उपयोग करते हैं।एक अलग HTML टैग लाने के लिए सबसे अच्छा तरीका

  • ब्लॉगर:: <meta content='blogger' name='generator'/> (सामग्री पहले, नाम बाद में हाँ एकल उद्धरण और,,!)
  • वर्डप्रेस: ​​

    उदाहरण के लिए, यहाँ दो प्रमुख प्रदाताओं कि मेटा नाम जनरेटर टैग अलग ढंग से प्रयोग कर रहे हैं <meta name="generator" content="WordPress.com" /> (पहले नाम, सामग्री बाद में)

क्या सभी मामलों के लिए सामग्री के मूल्य निकालने का कोई तरीका है (सिंगल/डबल कोट्स, पंक्ति में पहला/अंतिम)?

पीएस हालांकि मैं जावा का उपयोग कर रहा हूं, उत्तर शायद अधिक लोगों की मदद करेगा यदि यह आम तौर पर नियमित अभिव्यक्तियों के लिए होता है।

उत्तर

14

जवाब है: नियमित अभिव्यक्ति प्रयोग नहीं करते।

गंभीरता से। यदि आप जानते हैं कि यह वैध एक्सएमएल (शायद लगभग कभी सच नहीं है) तो एक एसजीएमएल पार्सर, या एक एक्सएमएल पार्सर का प्रयोग करें। आप इसे ठीक से प्राप्त करने की कोशिश कर रहे समय को पूरी तरह से खराब कर देंगे और बर्बाद कर देंगे। बस पहले से ही उपलब्ध है का उपयोग करें।

2

एक्सएचटीएमएल मानक के मुताबिक वे अंतर वास्तव में महत्वपूर्ण नहीं हैं।

दूसरे शब्दों में, वे बिल्कुल वही बात हैं।

इसके अलावा, यदि आप सिंगल कोट्स के साथ डबल कोट्स को प्रतिस्थापित करते हैं तो वही होगा।

एक XML दस्तावेज़ 'सामान्यीकरण' का सामान्य तरीका कुछ एपीआई का उपयोग करना है जो दस्तावेज़ को इसके इन्फोसेट प्रतिनिधित्व के रूप में मानता है। डोम और एसएक्स स्टाइल एपीआई दोनों इस तरह से काम करते हैं।

यदि आप उन्हें हाथ से (या एक RegEx के साथ) पार्स करना चाहते हैं तो आपको उन सभी चीजों को अपने कोड में दोहराना होगा और मेरी राय में, यह व्यावहारिक नहीं है।

3

असल में, आपको शायद कुछ प्रकार के HTML पार्सर का उपयोग करना चाहिए जहां आप पृष्ठ के DOM में प्रत्येक नोड (और इसलिए नोड विशेषताएँ) का निरीक्षण कर सकते हैं। मैं थोड़ी देर के लिए इनमें से किसी भी उपयोग किया है नहीं तो मैं पक्ष-विपक्ष को पता नहीं है, लेकिन यहाँ एक सूची http://java-source.net/open-source/html-parsers

2

नोट: सिंगल कोट्स (यहां तक ​​कि कोई उद्धरण नहीं, यदि मान में कोई स्थान नहीं है) the W3C HTML spec के अनुसार मान्य है। उद्धरण:

डिफ़ॉल्ट रूप से, SGML आवश्यक है कि सभी विशेषता मान या तो दोहरे उद्धरण चिह्न (ASCII दशमलव 34) या एकल उद्धरण चिह्न (ASCII दशमलव 39) का उपयोग कर अलग किया जाएगा ... कुछ मामलों में, लेखकों मूल्य निर्दिष्ट कर सकता है किसी भी उद्धरण चिह्न के बिना एक विशेषता का।

इसके अलावा, यह न भूलें कि गुणों का क्रम उलट किया जा सकता है और अन्य विशेषताएँ टैग में दिखाई दे सकती हैं।

0

ठीक है, क्योंकि आप भाषा-अज्ञेयवादी की तलाश में हैं, तो आप /<meta\s.*content=.*>/ जैसे REGEX को आजमा सकते हैं और इसके परिणाम ले सकते हैं और उन विशिष्ट मानों को पार्स कर सकते हैं जिन्हें आप ढूंढ रहे हैं। मैं किसी भी तरह से एक REGEX विशेषज्ञ नहीं हूं इसलिए शायद एक बेहतर तरीका है लेकिन http://www.codehouse.com/webmaster_tools/regex/ पर टूल का उपयोग करने में मैंने आपके द्वारा प्रदान किए गए दोनों तारों से मिलान किया।

1

आप जावा के HTMLEditorKit एक शॉट देना चाहते हैं। यह देखने के लिए प्रयोग करना आसान है कि पार्सिंग आप जो खोज रहे हैं उसे प्रदान करती है या नहीं।

content\s*=\s*['"].*?['"] 

रिटर्न

content = "blogger" 

और

content='Worpress.com' 

क्रमश:

0

आप regex का उपयोग करना आवश्यक है, यहां सिर्फ सामग्री हिस्सा पाने के लिए एक regex है। मैं कोई रेगेक्स विशेषज्ञ नहीं हूं, लेकिन यह आपके उदाहरणों को regexpal में दिया गया है।

एक बार जब आप इसे प्राप्त कर लेते हैं तो आप उद्धरणों के बीच सब कुछ प्राप्त कर सकते हैं, फिर भी यह एक और रेगेक्स (जो उस बिंदु पर केवल अनैतिक है) या सिर्फ पात्रों पर लूपिंग करें।

0

यदि आप जावा का उपयोग कर रहे हैं तो आप tagsoup पर देख सकते हैं, जो "[पार्सिंग] एचटीएमएल के लिए एक सैक्स-अनुरूप पार्सर है जैसा कि यह जंगली में पाया जाता है"।

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