如何将HTML代码转换为Confluence风格的Wiki标记?

时间:2012-05-07 14:38:38

标签: java html confluence mylyn wiki-markup

Mylyn Wikitext的API文档具有将Wiki Markup转换为HTML的功能,但我找不到将HTML代码转换/解析为Wiki Markup的功能。类MarkupParser有方法parseToHTML,但在哪里可以找到相反的方法?

5 个答案:

答案 0 :(得分:10)

尝试Wikifier

它并不能完全符合您的要求,但您可能会发现它足够,或者是一个有用的起点。

Wikifier将Confluence 4 XML存储格式的片段(即Confluence Source Editor插件所示,没有单个文档根元素)转换为Confluence 3 wiki标记。

为什么这与你的问题有关? Confluence 4 XML存储格式包含一些与XHTML元素和属性具有相同名称的元素和属性。

有关详细信息,请单击Wikifier网页上的“帮助”链接。

注意:Wikifier网页使用的XSLT样式表比与相关模式包捆绑在一起的XSLT样式表略微更新。

后来添加:Wikifier RT更接近你想要的。

答案 1 :(得分:4)

以下是使用WikiText Standalone在Mylyn中执行此操作的方法。用适当的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));
    }
}

文件 filename.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!

答案 2 :(得分:3)

可能是这个链接可以提供帮助:

http://labs.seapine.com/htmltowiki.cgi

答案 3 :(得分:2)

我能够使用Atlassian自己的Java库中的<activity android:name="com.example.Activities.A" android:launchMode="singleTask" android:clearTaskOnLaunch="false" android:finishOnTaskLaunch="false" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity> <activity android:name="com.example.Activities.B" android:launchMode="singleTask" android:clearTaskOnLaunch="false" android:finishOnTaskLaunch="false" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity> 来实现HTML到Confluence风格的WikiMarkup。这是一个简化的单元测试:

DefaultWysiwygConverter

POM必须包含正确的存储库和依赖项

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);

答案 4 :(得分:-1)

据我所知,无法将HTML转换为Confluence维基标记。由于Atlassian在Confluence 4.x中停止使用纺织品作为维基标记,因此无需进行转换。页面格式是XHTML。