首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java Wikitext解析器

Java Wikitext解析器
EN

Stack Overflow用户
提问于 2012-07-23 20:01:15
回答 4查看 8.1K关注 0票数 9

有什么好的解析器的想法吗?它有一个易于使用且可配置的api。我希望为它提供数据,如http://wikitravel.org/wiki/en/api.php?format=xml&action=parse&prop=wikitext&page=San%20Francisco,选择我想要的数据部分,并为每个唯一类型的元素输出自定义html?Java会更好,但如果有一个php/js解决方案可以兼容大多数(99%+) wikitext,那也没问题。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-07-24 02:52:22

Sweble可能是wikitext中最好的Java解析器。它与维基文本claims to be 100% compliant,但我严重怀疑。它将wikitext解析成一个抽象的语法树,然后您必须对其执行一些操作(如将其转换为HTML)。

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

票数 15
EN

Stack Overflow用户

发布于 2015-06-29 05:15:25

这个问题早在几年前就得到了回答,但我想让未来的访问者省去弄清楚如何使用Sweble的麻烦。

您可以在他们的站点上尝试文档,但我无法理解。看看示例源代码就知道了。从https://repo1.maven.org/maven2/org/sweble/wikitext/swc-example-basic/2.0.0/swc-example-basic-2.0.0-sources.jar下载swc-example-basic的源代码jar并查看App.java和TextConverter.java。

基本上,要解析页面并将其转换为另一种形式,首先需要向项目添加以下依赖项:

代码语言:javascript
复制
    <dependency>
        <groupId>org.sweble.wikitext</groupId>
        <artifactId>swc-engine</artifactId>
        <version>2.0.0</version>
    </dependency>

然后,执行以下操作:

代码语言:javascript
复制
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());
}

您可以在上面提到的示例中找到TextConverter类。自定义它来做任何你想做的事情。例如,下面的代码确保所有粗体文本都用“**”括起来:

代码语言:javascript
复制
public void visit(WtBold b)
{
    write("**");
    iterate(b);
    write("**");
}

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

票数 15
EN

Stack Overflow用户

发布于 2016-12-15 02:20:30

我刚刚在Bliki上取得了成功:https://bitbucket.org/axelclk/info.bliki.wiki/wiki/Mediawiki2HTML

Bliki是XWiki使用的东西,用法非常简单:

代码语言:javascript
复制
String htmlText = WikiModel.toHtml("This is a simple [[Hello World]] wiki tag");

以下是下载列表:https://oss.sonatype.org/content/repositories/snapshots/info/bliki/wiki/bliki-core/

但在Maven中使用这一点要容易得多。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11612118

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档