2013-03-12 86 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