2012-11-23 42 views
1
public String transform_XML(String type, InputStream file){ 
     TransformerFactory tf = TransformerFactory.newInstance(); 
     String xslfile = "/StyleSheets/" + type + ".xsl"; 
     Transformer t = tf.newTemplates(new StreamSource(this.getClass().getResourceAsStream(xslfile))).newTransformer(); 
     Source source = new StreamSource(file); 
     CharArrayWriter wr = new CharArrayWriter(); 
     StreamResult result = new StreamResult(wr); 
     t.transform(source, result); 
    return wr.toString(); 
} 

上述方法以xsl和xml文件作爲輸入,並將轉換後的結果作爲字符串返回。已經使用包javax.xml.transform中的類來完成此操作。在java中轉換html文件

現在我可以使用相同的軟件包來轉換html文件嗎? (由於包名有xml我認真地懷疑它。)我該怎麼做轉換一個html文件?

+0

你想要做什麼樣的轉變? – Grooveek

+0

@Grooveek - 正如你看到我上面給出的方法,結果不是一個XML,而是一個字符串。如果我的xsl需要文章標題,那麼帶有屬性'articletitle'的xml標籤中的內容將被提取並返回。希望你明白這一點.. – Linda

回答

1

正如你所理解的,html文件不是必須的有效的xml。但您可以將html轉換爲xml,然後使用有效的xml進行操作(轉換後 - 您將獲得DOM樹)。

我建議你使用CyberNeko HTML Parser轉變成htmlxml。例如

草案:

import org.cyberneko.html.parsers.DOMParser; 
import org.w3c.dom.Document; 
... 
public Document parseHtml(InputStream is) throws Exception { 
    DOMParser parser = new DOMParser(); 
    parser.parse(new InputSource(is)); 
    return parser.getDocument(); 
} 

如果使用maven - 你可以簡單地從倉庫http://mvnrepository.com/artifact/nekohtml/nekohtml

+0

因此,我必須將html轉換爲使用'NekoHTML'的格式良好的XMl,然後可以使用我發佈的相同方法...謝謝。我在這方面的工作,並會讓你知道。你會展示一些代碼來解析.. – Linda

+0

@Kate看看我的編輯 – stemm

1
public class SimpleXSLT { 
    public static void main(String[] args) { 

    String inXML = "C:/tmp/temp.html"; 
    String inXSL = "C:/tmp/temp.xsl"; 
    String outTXT = "C:/tmp/temp_copy.html"; 
    SimpleXSLT st = new SimpleXSLT(); 
    try { 
     st.transform(inXML,inXSL,outTXT); 
     } catch(TransformerConfigurationException e) { 
     System.err.println("Invalid factory configuration"); 
     System.err.println(e); 
     } catch(TransformerException e) { 
     System.err.println("Error during transformation"); 
     System.err.println(e); 
    } 
    } 

    public void transform(String inXML,String inXSL,String outTXT) 
    throws TransformerConfigurationException, 
    TransformerException { 
    TransformerFactory factory = TransformerFactory.newInstance(); 
    StreamSource xslStream = new StreamSource(inXSL); 
    Transformer transformer = factory.newTransformer(xslStream); 
    transformer.setErrorListener(new MyErrorListener()); 
    StreamSource in = new StreamSource(inXML); 
    StreamResult out = new StreamResult(outTXT); 
    transformer.transform(in,out); 
    System.out.println("The generated XML file is:" + outTXT); 
    } 
} 
+0

你是否說,我可以使用相同的包裝來處理html文件... – Linda

+0

@kate你可以使用相同的包來處理html –

+0

好吧,但我相信我的html不會很好形成。我試圖執行stemm給出的解決方案。沒有惡意。 Thnaks的快速建議... – Linda

1

添加到您的項目CyberNeko據我瞭解您的意見,這主要是爲了刮昂找回信息

您可以看看JSoup,這對於從HTM中解析和刮取DOM非常方便大號

否則,如果你想保持你的XSLT文件,stemm解決方案要細