tags:

views:

1727

answers:

3

is there an easy way to transform HTML into markdown with JAVA?

I am currently using the Java MarkdownJ library to transform markdown to html.

import com.petebevin.markdown.MarkdownProcessor;
...
public static String getHTML(String markdown) {
    MarkdownProcessor markdown_processor = new MarkdownProcessor();
    return markdown_processor.markdown(markdown);
}

public static String getMarkdown(String html) {
/* TODO Ask stackoverflow */
}
+9  A: 

Use this XSLT.

If you need help using XSLT and Java here's a code snippet:

public static void main(String[] args) throws Exception {

    File xsltFile = new File("mardownXSLT.xslt");

    Source xmlSource = new StreamSource(new StringReader(theHTML));
    Source xsltSource = new StreamSource(xsltFile);

    TransformerFactory transFact =
            TransformerFactory.newInstance();
    Transformer trans = transFact.newTransformer(xsltSource);

    StringWriter result = new StringWriter();
    trans.transform(xmlSource, new StreamResult(result));
}
Marcio Aguiar
+1, that's brilliant.
Ninefingers
A: 

I am working on the same issue, and experimenting with a couple different techniques.

The answer above could work. You could use the jTidy library to do the initial cleanup work and convert from HTML to XHTML. You use the XSLT stylesheet linked above.

Unfortunately there is no library that has a one-stop function to do this in Java. You could try using the Python script html2text with Jython, but I haven't yet tried this!

myabc
A: 

if you are using WMD editor and want to get the markdown code on the server side, just use these options before loading the wmd.js script:

wmd_options = {
  // format sent to the server.  can also be "HTML"
  output: "Markdown",

  // line wrapping length for lists, blockquotes, etc.
  lineLength: 40,

  // toolbar buttons.  Undo and redo get appended automatically.
  buttons: "bold italic | link blockquote code image | ol ul heading hr",

  // option to automatically add WMD to the first textarea found.
  autostart: true
 };