2010-03-30 21 views
5

शुद्ध करने के लिए जेटीडी का उचित उपयोग मैं एक इनपुट HTML स्ट्रिंग को स्वच्छ करने के लिए जेटीडी (jtidy-r938.jar) का उपयोग करने की कोशिश कर रहा हूं, लेकिन मुझे डिफ़ॉल्ट सेटिंग्स को सही करने में समस्याएं आ रही हैं। अक्सर "हैलो वर्ल्ड" जैसे स्ट्रिंग्स के बाद "helloworld" के रूप में समाप्त होता है। मैं यह दिखाना चाहता था कि मैं यहां क्या कर रहा हूं, और किसी भी पॉइंटर्स की वास्तव में सराहना की जाएगी:एचटीएमएल

मान लें कि rawHtml स्ट्रिंग जिसमें इनपुट (असली दुनिया) HTML है। यह वही है जो मैं कर रहा हूं:

 Tidy tidy = new Tidy(); 
     tidy.setPrintBodyOnly(true); 

     ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
     PrintStream ps = new PrintStream(baos); 

     tidy.parse(new StringReader(rawHtml), ps); 
     return baos.toString("UTF8"); 

सबसे पहले, क्या उपरोक्त कोड के साथ मूल रूप से कुछ गलत दिखता है? मुझे इसके साथ अजीब परिणाम मिल रहे हैं।

<p class="MsoNormal" style="text-autospace:none;"><font color="black"><span style="color:black;">???</span></font><b><font color="#7f0055"><span style="color:#7f0055;font-weight:bold;">private</span></font></b><font color="black"><span style="color:black;"> String parseDescription</span></font><font>

उत्पादन होता है:

उदाहरण के लिए, निम्न इनपुट पर विचार

<p class="MsoNormal" style="text-autospace:none;"><font color= "black"><span style="color:black;">&nbsp;&nbsp;&nbsp;</span></font> <b><font color="#7F0055"><span style= "color:#7f0055;font-weight:bold;">private</span></font></b><font color="black"><span style="color:black;">String parseDescription</span></font></p>

तो,

"सार्वजनिक स्ट्रिंग parseDescription" "publicString parseDescription" हो जाता है

अग्रिम धन्यवाद!

+0

मैंने यह भी देखा कि जेटीडी ' ' बाइट 'ए0' में परिवर्तित करेगा, जो अंतरिक्ष ('Node.getNodeValue()') के रूप में प्रिंट करता है, लेकिन जब आप किसी यूटीएफ 8 स्ट्रिंग में कनवर्ट करने का प्रयास करते हैं, तो यह '?' क्योंकि यह वैध यूटीएफ चरित्र नहीं है! वैसे यह [यूनिकोड] है (http://www.unicode.org/charts/PDF/U0080.pdf), लेकिन HTML नहीं है और '?' के रूप में प्रदर्शित होता है। – Chloe

उत्तर

1

यहां हम एंटी से जेटीडी को कैसे बुला रहे हैं। आप इसे से API कॉल का अनुमान लगा सकते:

StringWriter writer = new StringWriter(); 
tidy.getConfiguration().printConfigOptions(writer, true); 
System.out.println(writer.toString()); 

शायद यह तो स्पष्ट मिलता है कि समस्या क्या कारण बनता है:

<tidy destdir="${build.dir.result}"> 
    <fileset dir="${src}" includes="**/*.htm"/> 
    <parameter name="tidy-mark" value="false"/> 
    <parameter name="output-xml" value="no"/> 
    <parameter name="numeric-entities" value="yes"/> 
    <parameter name="indent-spaces" value="2"/> 
    <parameter name="indent-attributes" value="no"/> 
    <parameter name="markup" value="yes"/> 
    <parameter name="wrap" value="2000"/> 
    <parameter name="uppercase-tags" value="no"/> 
    <parameter name="uppercase-attributes" value="no"/> 
    <parameter name="quiet" value="no"/> 
    <parameter name="clean" value="yes"/> 
    <parameter name="show-warnings" value="yes"/> 
    <parameter name="break-before-br" value="yes"/> 
    <parameter name="hide-comments" value="yes"/> 
    <parameter name="char-encoding" value="latin1"/> 
    <parameter name="output-html" value="yes"/> 
</tidy> 
3

कैसे JTidy कॉन्फ़िगर किया गया है पर एक नज़र डालें।

अजीब क्या है? वास्तविक उदाहरण और अपेक्षित ... का थोड़ा उदाहरण, शायद?

+0

हां, अजीब समस्या – ragebiswas

+0

के साथ पोस्ट को अपडेट किया गया मेरी समस्या भी हल हो गई, thx! – jambriz