我该如何将HTML代码转换为Confluence样式的Wiki标记?

15

Mylyn Wikitext的API文档提供了将维基标记转换为HTML的功能,但我找不到将HTML代码转换/解析为维基标记的功能。类MarkupParserparseToHTML方法,但我在哪里可以找到反向转换?

4个回答

11

试试 Wikifier

它可能不能完全满足你的需求,但你可能会发现它足够使用或是一个有用的起点。

Wikifier 可以将一些 Confluence 4 XML 存储格式的片段(即由 Confluence Source Editor 插件提供的,没有单个文档根元素)转换为 Confluence 3 Wiki 标记。

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

更多信息,请点击 Wikifier 网页上的“帮助”链接。

注意:Wikifier 网页使用的 XSLT 样式表略新于相关模式包中捆绑的 XSLT 样式表。

此外添加: Wikifier RT 更接近你所需的功能。


3
@Christian Koch:Confluence 4存储格式不是XHTML,而是包含了一些与XHTML body元素的某些后代具有相同名称(和一些属性)的元素的Confluence 4 XML存储格式。Atlassian曾经将Confluence 4存储格式称为XHTML,但最近(在一些提示下)开始将其称为“基于XHTML的”。对于问题“Confluence支持哪些XHTML子集?”(2012-04-12),Atlassian回答说:“该页面已经非常详尽-您在此页面上没有看到的任何标签都可能会被删除”。 - Graham Hannington

4

我使用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>

1
我认为这是最好的选择。它直接使用Atlassian自己的解析器。一些人在Atlassian论坛上遇到了依赖关系不正确的问题,因此我提供了一个带有工作POM的示例,可以在github上找到。 - Niko

4

使用WikiText Standalone插件,Mylyn中进行操作。根据所需的维基标记替换相应的DocumentBuilder(您需要检查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!

我通过Maven下载了jar包,但无法找到HTMLParser文件。你能帮忙吗? - Tarun

-3
据我所知,目前没有将HTML转换为Confluence wiki标记的方法。而且自从Atlassian在Confluence 4.x中停止使用textile作为wiki标记后,也就不需要进行转换了。页面格式是XHTML。

3
@Graham Hannington在他的答案下面驳斥了这个回答,并且他和我都发布了将HTML转换为Confluence wiki标记的方法。 - JoshDM

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接