Java Wikitext Parser

No_*_*ame 5 java api parsing mediawiki

有一个很好的解析器的任何想法,易于使用api可配置?我正在寻找它的数据,如http://wikitravel.org/wiki/en/api.php?format=xml&action=parse&prop=wikitext&page=San%20Francisco,选择我想要的数据部分,并输出自定义html每种独特的元素类型?Java将是首选,但如果有一个php/js解决方案与大多数(99%+)wikitext兼容,那也没关系.

Chr*_*ian 12

Sweble可能是wikitext的最佳Java解析器.它声称与wikitext 100%兼容,但我严重怀疑.它将wikitext解析为抽象语法树,然后您必须执行某些操作(例如将其转换为HTML).

mediawiki.org上有一个页面,列出了各种编程语言的wiki文本解析器.我不认为他们中的任何人做了99 +%的wikitext.一般来说,解析wikitext是一个非常复杂的问题.Wikitext甚至没有在MediaWiki解析器本身之外的任何地方正式定义.


Hap*_*eer 10

这个问题在几年前得到了解答,但我想为未来的访问者节省我必须采取的努力来弄清楚如何使用Sweble.

您可以在他们的网站上试用文档,但我无法弄清楚.只需看看示例源代码.在https://repo1.maven.org/maven2/org/sweble/wikitext/swc-example-basic/2.0.0/swc-example-basic-2.0.0-sources下载swc-example-basic的源代码包.jar并查看App.java和TextConverter.java.

基本上,要解析页面并将其转换为另一个表单,首先要将以下依赖项添加到项目中:

    <dependency>
        <groupId>org.sweble.wikitext</groupId>
        <artifactId>swc-engine</artifactId>
        <version>2.0.0</version>
    </dependency>
Run Code Online (Sandbox Code Playgroud)

然后,执行以下操作:

public String convertWikiText(String title, String wikiText, int maxLineLength) throws LinkTargetException, EngineException {
    // Set-up a simple wiki configuration
    WikiConfig config = DefaultConfigEnWp.generate();
    // Instantiate a compiler for wiki pages
    WtEngineImpl engine = new WtEngineImpl(config);
    // Retrieve a page
    PageTitle pageTitle = PageTitle.make(config, title);
    PageId pageId = new PageId(pageTitle, -1);
    // Compile the retrieved page
    EngProcessedPage cp = engine.postprocess(pageId, wikiText, null);
    TextConverter p = new TextConverter(config, maxLineLength);
    return (String)p.go(cp.getPage());
}
Run Code Online (Sandbox Code Playgroud)

TextConverter是一个你可以在我上面提到的例子中找到的类.自定义它可以做任何你想做的事情.例如,以下内容确保所有粗体文本都被"**"包围:

public void visit(WtBold b)
{
    write("**");
    iterate(b);
    write("**");
}
Run Code Online (Sandbox Code Playgroud)

对于您将遇到的每种类型的元素,该类上有一堆访问方法.