Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Use External Css to parse XML

Tags:

itextsharp

OK i am parsing HTML from a string into a PDFCEll.

It works great thanks to some help from here.

Here is how i am doing it.

How do i use an external css file so i can use class's and not STYLE=""

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

    string html = "<ul class=\"list\"><li>html 1</li><li>html 2</li><li>html 3</li></ul>";
    using (TextReader sr = new StringReader(html))
    {
        XMLWorkerHelper.GetInstance().ParseXHtml(XhtmlHelper, sr);
    }
    foreach (var element in XhtmlHelper.elements)
    {
        if (element.IsContent())
        {
            PDFCell.AddElement(element);
        }
    }

Now i have got this far, but how to tye it all in evades me. Any help would be much apreacheted.

    HtmlPipelineContext htmlContext = new HtmlPipelineContext(null);
    htmlContext.SetTagFactory(iTextSharp.tool.xml.html.Tags.GetHtmlTagProcessorFactory());
    ICSSResolver cssResolver = XMLWorkerHelper.GetInstance().GetDefaultCssResolver(false);
    cssResolver.AddCssFile(HttpContext.Current.Server.MapPath("~/Templates/css/core.css"), true);
like image 328
Karl Wilson Avatar asked Apr 19 '13 09:04

Karl Wilson


People also ask

Can we use CSS in XML?

CSS can be used to display the contents of the XML document in a clear and precise manner. It gives the design and style to whole XML document. Define the style rules for the text elements such as font-size, color, font-weight, etc.

How do I style in XML?

For each style you want to create, follow these steps: Add a <style> element with a name that uniquely identifies the style. Add an <item> element for each style attribute you want to define. The name in each item specifies an attribute you would otherwise use as an XML attribute in your layout.

What is the correct way of referring to a stylesheet called style CSS to an XML document?

The keyword "xml-stylesheet" indicates that the document has a link to a style sheet in the same way as a LINK element with REL="stylesheet" in HTML. There are some variations of this processing instruction corresponding to the different variants of LINK in HTML. The LINK mechanism is the simplest to use.


1 Answers

If you poke around the source here and you should see how to implement it. Basically, your three line using block quadruples in size and complexity:

var XhtmlHelper = new XhtmlToListHelper();
var htmlContext = new HtmlPipelineContext(null);
htmlContext.SetTagFactory(iTextSharp.tool.xml.html.Tags.GetHtmlTagProcessorFactory());
var cssResolver = XMLWorkerHelper.GetInstance().GetDefaultCssResolver(false);
cssResolver.AddCssFile(@"c:\test.css", true);
var pipeline = new CssResolverPipeline(cssResolver, new HtmlPipeline(htmlContext, new ElementHandlerPipeline(XhtmlHelper, null)));//Here's where we add our IElementHandler
var worker = new XMLWorker(pipeline, true);
var parser = new XMLParser();
parser.AddListener(worker);

using (TextReader sr = new StringReader(html)) {
    parser.Parse(sr);
}
like image 67
Chris Haas Avatar answered Sep 20 '22 20:09

Chris Haas