我想保存文本,我从各种来源中搜集文本而没有上面的HTML标记,但也保留了我合理的结构。
Markdown似乎是解决这个问题的方法(或者可能是MultiMarkdown)。
有a question提供了从HTML转换为markdown的建议,但我想指定一些具体的事情:
所以我的问题如标题所述:Markdown Java API是否有一个像样的,可自定义的HTML?
答案 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'
}