2011-03-29 116 views
0

我有htmlcontent包含大於和小於符號。但是這些符號不被編碼爲& lt;和& gt ;.爲了平衡內容中的標籤,我通過cyberneko html解析器傳遞內容。解析大於和小於符號之間的內容後,就會被分離出來。爲了克服這個問題,我必須在cyberneko html解析器中設置什麼設置?cyberneko html設置忽略未編碼大於和小於符號

樣本內容:

<DIV>平均響應時間 服務器是關鍵的,因爲它的值 282> 0毫秒。 <BR> [閾值 詳細說明:臨界如果值> 0, 警告如果值= 0,清除如果值< 0] < /格>

nekohtml解析後

<div> <br> 0] </div >

請幫忙。由於事先

回答

0

下面將輸出的程序

<DIV>平均響應時間服務器是關鍵的,因爲它的值282 & GT; 0毫秒。 < br/> [閾值詳細信息:如果值爲& gt; 0,警告如果值= 0,則清除值& lt; 0] < /格>

package test; 

import java.io.StringReader; 

import javax.xml.transform.Transformer; 
import javax.xml.transform.TransformerFactory; 
import javax.xml.transform.dom.DOMSource; 
import javax.xml.transform.stream.StreamResult; 

import org.apache.xerces.dom.DocumentImpl; 
import org.cyberneko.html.parsers.DOMFragmentParser; 
import org.w3c.dom.Document; 
import org.w3c.dom.DocumentFragment; 
import org.xml.sax.InputSource; 

public class TestHTMLDOMFragment { 
    private static final String PARSE_TEXT = "<div>Average Response Time server is critical because its value 282 > 0 ms. <br>[Threshold Details : Critical if value > 0, Warning if value = 0, Clear if value < 0]</div>"; 

    public static void main(String[] argv) throws Exception { 
     DOMFragmentParser parser = new DOMFragmentParser(); 

     // output the elements in lowercase, nekohtml doesn't do this by default 
     parser.setProperty("http://cyberneko.org/html/properties/names/elems","lower"); 

     // if this is set to true (the default, you dont need to specifiy this) 
     // then neko html wont and an html,head and body tags to the response. 
     parser.setFeature("http://cyberneko.org/html/features/document-fragment",true); 

     Document document = new DocumentImpl(); 
     DocumentFragment fragment = document.createDocumentFragment(); 

     // parse the document into a fragment 
     parser.parse(new InputSource(new StringReader(PARSE_TEXT)), fragment); 

     TransformerFactory transformerFactory = TransformerFactory.newInstance(); 
     Transformer transformer = transformerFactory.newTransformer(); 
     // don't display the namespace declaration 
     transformer.setOutputProperty("omit-xml-declaration", "yes"); 
     DOMSource source = new DOMSource(fragment); 
     StreamResult result = new StreamResult(System.out); 
     transformer.transform(source, result); 

    } 
} 

在代碼中的註釋顯示以上我使用解析器設置。

我也用了org.cyberneko.html.parsers.DOMFragmentParser你可以也可以解析文本,這只是一個HTML片段

我使用nekohtml 14年9月1日

如果你使用maven,這裏是pom.xml依賴關係部分...

<dependencies> 
    <dependency> 
     <groupId>net.sourceforge.nekohtml</groupId> 
     <artifactId>nekohtml</artifactId> 
     <version>1.9.14</version> 
     <type>jar</type> 
    </dependency> 
</dependencies>