任何想法与一个易于使用的API可配置的一个很好的解析器?我正在为它提供数据,如http://wikitravel.org/wiki/en/api.php?format=xml&action=parse&prop=wikitext&page=San%20Francisco,选择我想要的数据部分,并为每种独特类型的元素输出自定义html? Java是首选,但如果有一个与大多数(99%以上)wiki文本兼容的php/js解决方案,那也是可以的。爪哇Wikitext分析器
回答
Sweble可能是wikitext的最佳Java解析器。它带有wiki文本,但我严重怀疑这一点。它将wikitext解析为一个抽象语法树,然后你必须做些事情(比如将其转换为HTML)。
There is a page on mediawiki.org列出了各种编程语言的wikitext解析器。但我不认为他们中的任何人都能做到99 +%的wiki文本。一般来说,解析wikitext是一个非常复杂的问题。 Wikitext甚至没有在MediaWiki解析器本身之外的任何地方正式定义。
这个问题在几年前就已经回答了,但我想为未来的访问者保存我不得不花费的精力来弄清楚如何使用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。
基本上,解析一个页面,并将其转换为另一种形式,首先添加下面的依赖关系到项目:
<dependency>
<groupId>org.sweble.wikitext</groupId>
<artifactId>swc-engine</artifactId>
<version>2.0.0</version>
</dependency>
然后,请执行下列操作:
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是在上面提到的例子中你会发现一个类。定制它做你想做的任何事情。例如,下面的操作确保所有粗体文字是由“**”包围:
public void visit(WtBold b)
{
write("**");
iterate(b);
write("**");
}
有一堆关于该类每种类型,您会遇到元素的访问方法。
你也可以使用XWiki的渲染引擎(http://rendering.xwiki.org)。下面是你如何解析一些链接到MediaWiki内容的例子:
// Initialize Rendering components and allow getting instances
EmbeddableComponentManager componentManager = new EmbeddableComponentManager();
componentManager.initialize(this.getClass().getClassLoader());
// Get the MediaWiki Parser
Parser parser = componentManager.getInstance(Parser.class, "mediawiki/1.0);
// Parse the content in mediawiki markup and generate an AST (it's also possible to use a streaming parser for large content)
XDOM xdom = parser.parse(new StringReader("... input here"));
// Perform any transformation you wish to the XDOM here
...
// Generate XHTML out of the modified XDOM
WikiPrinter printer = new DefaultWikiPrinter();
BlockRenderer renderer = componentManager.getInstance(BlockRenderer.class, "xhtml/1.0");
renderer.render(xdom, printer);
// The result is now in the printer object
printer.toString();
查看更多的例子在http://rendering.xwiki.org/xwiki/bin/view/Main/GettingStarted
希望它能帮助。
我刚刚和Bliki成功:https://bitbucket.org/axelclk/info.bliki.wiki/wiki/Mediawiki2HTML
Bliki就是所使用的XWiki实现和使用方法十分简单:
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中使用它更容易。
- 1. 的JavaCC解析器选项LOOKAHEAD,爪哇
- 2. 爪哇分裂并与值
- 3. 爪哇 - 在Web浏览器
- 4. 爪哇月度计时器
- 5. 爪哇机器人访问
- 6. 爪哇秋千定时器
- 7. 爪哇 - 解析文本文件
- 8. 硒,爪哇,waitForCondition
- 9. 爪哇thesauraus
- 10. 爪哇 - 在
- 11. 爪哇 - 由
- 12. 爪哇的StringIndexOutOfBoundsException
- 13. 爪哇:enum toString()
- 14. 爪哇排序
- 15. 爪哇 - 并行
- 16. 爪哇优化
- 17. 爪哇 - 每行
- 18. 爪哇从长
- 19. 爪哇重力bug
- 20. 爪哇 - 调用Arrays.copyOfRange
- 21. 爪哇VoIP记录
- 22. 爪哇 - 双比较
- 23. 爪哇 - ARGS []为int
- 24. 爪哇由令牌
- 25. 爪哇 - 线程池
- 26. 爪哇 - 防暴API
- 27. 爪哇 - 使用GSON
- 28. 爪哇实施htonl
- 29. 爪哇oop - 继承
- 30. 爪哇指数法
要怎样解析wikitext?或者:您如何定制HTML? – Bergi 2012-07-23 12:05:18
我想将wikitext转换为html,但能够改变kind输出,例如将italizing('')改为其他的。 – 2012-07-23 18:50:02
你不能这样做,即将更改为其他内容? – Bergi 2012-07-23 18:55:02