【问题标题】:How do I convert HTML code to Confluence-style Wiki Markup?如何将 HTML 代码转换为 Confluence 风格的 Wiki 标记?
【发布时间】:2012-05-07 14:38:38
【问题描述】:

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

【问题讨论】:

    标签: java html confluence mylyn wiki-markup


    【解决方案1】:

    试试Wikifier

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

    Wikifier 将 Confluence 4 XML 存储格式的 sn-ps 转换为 Confluence 3 wiki 标记。

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

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

    注意:Wikiifier 网页使用的 XSLT 样式表比与相关架构包捆绑的 XSLT 样式表稍新。

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

    【讨论】:

    • @Christian Koch:Confluence 4 存储格式不是 XHTML。相反,Confluence 4 XML 存储格式包含与 XHTML body 元素的某些后代(以及它们的某些属性)具有相同名称的元素。 Atlassian 过去将 Confluence 4 存储格式称为 XHTML,但最近(有一些提示)将其称为“基于 XHTML”。对于“Confluence 支持哪些 XHTML 子集?”的问题。 (2012-04-12),Atlassian 回应说“这个页面已经很全面了——你在这个页面上没有看到的任何标签都可能会被删除”
    【解决方案2】:

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

    【讨论】:

    • 我认为这是最好的选择。它直接使用 Atlassian 自己的解析器。有些人,on the atlassian forums,在获取正确的依赖关系时遇到了麻烦,所以我在github 上为这个示例提供了一个工作 POM。
    【解决方案3】:

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

    【讨论】:

    • @Graham Hannington 在他的答案下方的 cmets 中反驳了这个答案,他和我都发布了将 HTML 转换为 Confluence wiki 标记的方法。
    【解决方案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!
    

    【讨论】:

    • 我通过 Maven 下载了 jar,但找不到 HTMLParser 文件。你能帮忙吗
    猜你喜欢
    • 2018-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-13
    • 1970-01-01
    • 2014-02-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多