【发布时间】:2012-05-07 14:38:38
【问题描述】:
Mylyn Wikitext 的 API 文档具有将 Wiki 标记转换为 HTML 的函数,但我找不到将 HTML 代码转换/解析为 Wiki 标记的函数。 MarkupParser 类有 parseToHTML 方法,但我在哪里可以找到相反的方法?
【问题讨论】:
标签: java html confluence mylyn wiki-markup
Mylyn Wikitext 的 API 文档具有将 Wiki 标记转换为 HTML 的函数,但我找不到将 HTML 代码转换/解析为 Wiki 标记的函数。 MarkupParser 类有 parseToHTML 方法,但我在哪里可以找到相反的方法?
【问题讨论】:
标签: java html confluence mylyn wiki-markup
试试Wikifier。
它并不完全符合您的要求,但您可能会发现它已经足够了,或者是一个有用的起点。
Wikifier 将 Confluence 4 XML 存储格式的 sn-ps 转换为 Confluence 3 wiki 标记。
为什么这与您的问题有关? Confluence 4 XML 存储格式包括一些与 XHTML 元素和属性同名的元素和属性。
有关更多信息,请单击 Wikiifier 网页上的帮助链接。
注意:Wikiifier 网页使用的 XSLT 样式表比与相关架构包捆绑的 XSLT 样式表稍新。
这是后来添加的:Wikifier RT 更接近你想要的。
【讨论】:
我能够使用 Atlassian 自己的 Java 库中的 DefaultWysiwygConverter 将 HTML 转换为 Confluence 风格的 WikiMarkup。这是一个简化的单元测试:
import com.atlassian.renderer.wysiwyg.converter.DefaultWysiwygConverter;
String htmlString = "This is <em>emphasized</em> and <b>bold</b>";
DefaultWysiwygConverter converter = new DefaultWysiwygConverter();
String wikiMarkupString = converter.convertXHtmlToWikiMarkup(htmlString);
Assert.assertEquals("This is _emphasized_ and *bold*", wikiMarkupString);
POM 必须包含正确的存储库和依赖项
<dependency>
<groupId>com.atlassian.renderer</groupId>
<artifactId>atlassian-renderer</artifactId>
<version>8.0.5</version>
<exclusions>
<exclusion>
<!-- This exclusion is necessary if you are in a situation which
it conflicts, EG: using spring-boot -->
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
</exclusion>
</exclusions>
</dependency>
<repositories>
<repository>
<!-- https://developer.atlassian.com/docs/advanced-topics/working-with-maven/atlassian-maven-repositories -->
<id>atlassian-public</id>
<url>https://packages.atlassian.com/maven/repository/public</url>
<snapshots>
<enabled>true</enabled>
<updatePolicy>never</updatePolicy>
<checksumPolicy>warn</checksumPolicy>
</snapshots>
<releases>
<enabled>true</enabled>
<checksumPolicy>warn</checksumPolicy>
</releases>
</repository>
</repositories>
【讨论】:
据我所知,没有办法将 HTML 转换为 Confluence wiki 标记。由于 Atlassian 在 Confluence 4.x 中停止使用纺织品作为 wiki 标记,因此无需进行转换。页面格式是 XHTML。
【讨论】:
这是在 Mylyn 中使用 WikiText Standalone 的方法。将适当的 DocumentBuilder 替换为您想要的 Wiki 标记(您必须检查 API 以查看可用的内容;TextileDocumentBuilder 也存在)。
文件ConvertToConfluence.java:
package com.stackoverflow.mylyn;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.StringWriter;
import org.eclipse.mylyn.internal.wikitext.confluence.core.ConfluenceDocumentBuilder;
import org.eclipse.mylyn.wikitext.core.parser.HtmlParser;
import org.xml.sax.InputSource;
public class ConvertToConfluence {
public static String convertHTML(File htmlFile) {
InputStream in = null;
try {
in = new FileInputStream(htmlFile);
} catch (Exception ex) {
// TODO: handle or re-throw file exception
}
InputSource inputSource = new InputSource(new InputStreamReader(in));
StringWriter writer = new StringWriter();
ConfluenceDocumentBuilder builder = new ConfluenceDocumentBuilder(writer);
HtmlParser parser = new HtmlParser();
try {
parser.parse(inputSource, builder);
} catch (Exception ex) {
// TODO: handle or re-throw parsing exception
}
return writer.toString();
}
public static void main(String args[]) {
File file = new File("c:\\filename.html");
System.out.println(convertHTML(file));
}
}
文件文件名.html:
<HTML>
<BODY>
<p>This is <b>bold text</b> and some <i>italic text</i>.<br/><br/>TEST!</p>
</BODY>
</HTML>
产生 Confluence 输出:
This is *bold text* and some _italic text_.
\\TEST!
【讨论】: