2010-05-09 14 views
21

मेरे पास कुछ HTML के साथ एक क्यूस्ट्रिंग है ... क्या HTML से इसे पट्टी करने का कोई आसान तरीका है? मैं मूल रूप से केवल वास्तविक पाठ सामग्री चाहता हूं।क्या QT में QString से HTML को स्ट्रिप करने का कोई आसान तरीका है?

<i>Test:</i><img src="blah.png" /><br> A test case 

बन गयी:

Test: A test case 

मुझे पता है कि अगर क्यूटी इस के लिए एक स्ट्रिंग समारोह या उपयोगिता है उत्सुक हूँ।

उत्तर

11

आप QXmlStreamReader क्लास का उपयोग करके स्ट्रिंग के माध्यम से पुनरावृत्ति करने का प्रयास कर सकते हैं और सभी टेक्स्ट निकाल सकते हैं (यदि आप HTML स्ट्रिंग को अच्छी तरह से बनाए गए XML होने की गारंटी देते हैं)।

कुछ इस तरह:

QXmlStreamReader xml(htmlString); 
QString textString; 
while (!xml.atEnd()) { 
    if (xml.readNext() == QXmlStreamReader::Characters) { 
     textString += xml.text(); 
    } 
} 

लेकिन मैं निश्चित नहीं थे कि इसकी 100% QXmlStreamReader एपीआई के वैध ussage मैं इसे का उपयोग किया है काफी longe समय पहले और कुछ भूल सकते हैं के बाद से कर रहा हूँ।

+0

धन्यवाद। मैं इसे सत्यापित करने या निकालने की कोशिश नहीं कर रहा हूं। मैं बस इसे से छुटकारा पाना चाहता हूँ। –

+0

ओह, और जो पाठ मैं प्राप्त कर रहा हूं * एक विश्वसनीय स्रोत (उपयोगकर्ता इनपुट नहीं) से है इसलिए मुझे ठीक होना चाहिए। –

+0

क्या आपका मतलब 'टेक्स्टस्ट्रीम' के बजाय' टेक्स्टस्ट्रिंग 'था? –

34
QString s = "<i>Test:</i><img src=\"blah.png\" /><br> A test case"; 
s.remove(QRegExp("<[^>]*>")); 
// s == "Test: A test case" 
+1

यह उत्तर HTML इकाइयों के साथ तारों के लिए पर्याप्त नहीं होगा उदा। < –

+1

मेरे सिर के शीर्ष से इसकी समस्या यह है कि '
' को न्यूलाइन वर्ण में परिवर्तित करने के बजाय हटा दिया जाता है। – Marcus

+0

@ मर्कस तो वास्तव में सवाल क्या पूछा गया। HTML में से कोई भी कुछ भी परिवर्तित नहीं हो जाता है, यह एक पूरी तरह से अलग अनुरोध है –

20

आप प्रदर्शन इतना तो QTextDocument सादा पाठ करने के लिए HTML में परिवर्तित करने का एक बहुत अच्छा काम करता है के बारे में परवाह नहीं करते हैं।

QTextDocument doc; 
doc.setHtml(htmlString); 

return doc.toPlainText(); 

मुझे पता है कि यह प्रश्न पुराना है, लेकिन मैं गलत HTML को संभालने के लिए एक त्वरित और गंदे तरीके की तलाश में था। एक्सएमएल पार्सर अच्छे नतीजे नहीं दे रहा था।

+0

मुझे लगता है कि यह सबसे अच्छा जवाब है। यह ब्रेक जैसे बुनियादी प्रारूप रखता है। –

+3

शायद थोड़ा बेहतर समाधान 'QTextDocumentFragment' का उपयोग करना होगा: 'QString plainText = QTextDocumentFragment :: से HTML (htmlString) .toPlainText();' – Marcus

+0

आपको टिप्पणी के बजाय यह एक वास्तविक उत्तर बनाना चाहिए। मुझे लगता है कि सबसे अच्छा समाधान। –

0

स्थिति यह है कि कुछ एचटीएमएल मान्य नहीं है एक्सएमएल इसे सही ढंग से काम करने के लिए और भी खराब बनाता है।

यदि यह वैध xml (या बहुत खराब नहीं है) है, तो मुझे लगता है कि QXmlStreamReader + QXmlStreamEntityResolver खराब विचार नहीं हो सकता है।

नमूना कोड में: https://github.com/ycheng/misccode/blob/master/qt_html_parse/utils.cpp

(यह एक टिप्पणी हो सकता है, लेकिन मैं अभी भी ऐसा करने की अनुमति नहीं है)

-3

इस जवाब जो बाद में इस पोस्ट पढ़ सकते हैं और Qt5 या बाद में उपयोग करने के लिए है । बस नीचे दिए गए अंतर्निहित कार्यों का उपयोग कर HTML वर्णों से बचें।

QString str="<h1>some hedding </h1>"; // a string containing html tags. 
QString esc=str.toHtmlEscaped(); //esc contains the html escaped srring. 
+0

मैं टैग से बचने के लिए नहीं देख रहा हूं, मैं उन्हें हटाना चाहता हूं। –

+0

'QString :: toHtmlEscaped' HTML टैग को नहीं हटाता है।बस एचटीएमएल कोडों में '<', '>' आदि जैसे अक्षरों को परिवर्तित करता है। – Marcus

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

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