14

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

4

4 回答 4

11

试试维基百科

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

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

为什么这与您的问题完全相关?Confluence 4 XML 存储格式包括一些与 XHTML 元素和属性同名的元素和属性。

如需更多信息,请单击 Wikiifier 网页上的帮助链接。

注意:Wikiifier 网页使用的 XSLT 样式表比与相关模式包捆绑的 XSLT 样式表稍微更新一些。

稍后添加:Wikiifier RT更接近您想要的。

于 2012-06-25T14:46:32.980 回答
4

以下是您在 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!
于 2013-05-16T17:45:13.303 回答
4

我能够使用DefaultWysiwygConverter来自 Atlassian 自己的 Java 库的 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>
于 2016-06-03T21:46:55.860 回答
-3

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

于 2012-05-08T06:01:07.887 回答