2013-03-12 96 views
3

有人請提供一個解析HTML到iTextSharp(C#)中使用XMLWorkerHelper的元素列表的例子。如文檔中給出HTML to List using XMLWorker

Java版本是:

XMLWorkerHelper.getInstance().parseXHtml(new ElementHandler() { 
     public void add(final Writable w) { 

      if (w instanceof WritableElement) { 
      List<Element> elements = ((WritableElement)w).elements(); 
      // write class names of elements to file 
     } 
     } 

    }, HTMLParsingToList.class.getResourceAsStream("/html/walden.html")); 

回答

4

您需要實現IElementHandler接口在類自己的:

public class SampleHandler : IElementHandler { 
    //Generic list of elements 
    public List<IElement> elements = new List<IElement>(); 
    //Add the supplied item to the list 
    public void Add(IWritable w) { 
     if (w is WritableElement) { 
      elements.AddRange(((WritableElement)w).Elements()); 
     } 
    } 
} 

而不是使用此文件流是一個例子解析一個字符串。要使用文件,請將StringReader替換爲StreamReader

string html = "<html><head><title>Test Document</title></head><body><p>This is a test. <strong>Bold <em>and italic</em></strong></p><ol><li>Dog</li><li>Cat</li></ol></body></html>"; 
    //Instantiate our handler 
    var mh = new SampleHandler(); 
    //Bind a reader to our text 
    using (TextReader sr = new StringReader(html)) { 
     //Parse 
     XMLWorkerHelper.GetInstance().ParseXHtml(mh, sr); 
    } 

    //Loop through each element 
    foreach (var element in mh.elements) { 
     //Loop through each chunk in each element 
     foreach (var chunk in element.Chunks) { 
      //Do something 
     } 
    } 
+0

什麼是Samlpe處理程序?你能解釋一下嗎? @Chris Haas – CodeIt 2017-03-23 13:03:16

+1

'SampleHandler'是一個實現iText的IElementHandler接口的自定義類。這是完全自定義的代碼,只要您遵循界面的合同,您就可以隨心所欲地執行任何操作。 – 2017-03-23 13:25:29

+0

其實我正在將html轉換爲pdf,但是當調用ParseToElementList時我無法獲得Unicode字符。如果我使用ParseXHtml,我能夠做到沒有任何錯誤。但這樣我無法將結果添加到我的pdfpcell中。你能以正確的方式引導我嗎? @Chris Haas – CodeIt 2017-03-23 13:29:31