Markdown Java API是否有一个像样的,可定制的HTML?

时间:2010-11-01 17:25:41

标签: java html markdown

我想保存文本,我从各种来源中搜集文本而没有上面的HTML标记,但也保留了我合理的结构。

Markdown似乎是解决这个问题的方法(或者可能是MultiMarkdown)。

a question提供了从HTML转换为markdown的建议,但我想指定一些具体的事情:

  • 所有链接(包括图片)仅在END处引用(即没有内联网址)
  • 没有嵌入HTML(我甚至不能100%确定我如何处理困难的HTML ......但它不会被嵌入!)

所以我的问题如标题所述:Markdown Java API是否有一个像样的,可自定义的HTML?

2 个答案:

答案 0 :(得分:2)

您可以尝试调整HtmlCleaner,为DOM提供可行的界面:

TagNode root = htmlCleaner.clean( stream );
Object[] found = root.evaluateXPath( "//div[id='something']" );
if( found.length > 0 && found instanceof TagNode ) {
    ((TagNode)found[0]).removeFromTree();
}

这将允许您使用相当简单的API以您想要的任何格式构建输出流。

答案 1 :(得分:0)

有一个很棒的JS库,名为Turndown,您可以在线here进行尝试。它可以部分定制。例如,可以在最后引用链接。据我所知,没有嵌入式html,一切都已转换。

我需要Java(作为链接的问题),因此我将其移植了。 Java库称为CopyDown,它具有与Turndown相同的测试套件。

要使用gradle安装:

import (
    "fmt"
    "reflect"
)

type Person struct {
    FirstName string
    LastName int
    Age int
    HairColor string
    EyeColor string
    Height string
}

func updateFields(personA *Person, personB Person) {
    // .Elem() called to dereference the pointer
    aVal := reflect.ValueOf(personA).Elem()
    aTyp := aVal.Type()

    // no .Elem() called here because it's not a pointer
    bVal := reflect.ValueOf(personB)

    for i := 0; i < aVal.NumField(); i++ {
        // skip the "Age" field:
        if aTyp.Field(i).Name == "Age" {
          continue
        }
        // you might want to add some checks here,
        // eg stuff like .CanSet(), to avoid panics
        aVal.Field(i).Set(bVal.Field(i))
    }
}

func main() {
    b := Person{
        FirstName: "Bruno",
        LastName:  1,
        Age:       2,
        HairColor: "hello",
        EyeColor:  "world",
        Height:    "tall",
    }
    a := Person{}
    fmt.Println(a)
    updateFields(&a, b)
    fmt.Println(a)
}

然后使用它:

dependencies {
        compile 'io.github.furstenheim:copy_down:1.0'
}