2014-02-13 2 views
1

나는Confluence Storage Format XML을 HTML로 변환하는 방법?

https://docs.atlassian.com/atlassian-confluence/REST/3.2/

이 API는 콘텐츠 속성 합류 페이지를 반환하는 REST API를 사용하여 합류 컨텐츠를 당겨입니다. 내용은 xhtml과 독점 xml 태그가 혼합되어 있습니다.

https://confluence.atlassian.com/display/DOC/Confluence+Storage+Format

사용자 지정 XML 태그 이미지, 상대 링크 및 첨부 파일 같은 것들에 사용됩니다 : XML은 합류 저장 형식입니다. 내용을 곧바로 렌더링하면 사용자 정의 XML이 렌더링되지 않습니다. 나는 형식을 변환하도록되어 엔드 포인트의 모습을 발견했습니다

: https://docs.atlassian.com/confluence/latest/com/atlassian/confluence/xhtml/api/XhtmlContent.html

나는 그것이 이상 지원되지 않습니다 생각하지 않습니다. http://www.amnet.net.au/~ghannington/confluence/readme.html#wikifier

합류 위키 마크 업에 합류 XML 변환 :

는 또한이 프로젝트를 발견했습니다. 이 프로젝트는 2 개의 .xsl 시트와 함께 제공됩니다. 한 시트는 마크 업 변환을 처리하는 confluence2wiki.xsl이고, 다른 하나는 작업을 수행 할 것 같지만 불행하게도 구현이 좋지 않은 것으로 보인 confluence2xhtml.xsl입니다. 그것은 말 그대로 합류 XML을 xml처럼 보이는 xhtml로 변환합니다. 그래서 합류 XML에서 이미지 태그는 불행히도된다 : 매우 도움이되지 않습니다

<div class="extension-element"> 
    <p class="extension-element-markup"> 
     <span class="element-name">ac:image</span> 
     <span class="attribute-name">ac:alt</span> 
     <span class="markup">="</span> 
     <span class="attribute-value">Example1.png</span> 
     <span class="markup">"</span> 
    </p> 
<div class="extension-element-contents"> 
    <div class="extension-element"> 
    <p class="extension-element-markup"> 
     <span class="element-name">ri:url</span> 
     <span class="attribute-name">ri:value</span> 
     <span class="markup">="</span> 
     <span class="attribute-value">https://example.com/attachments/token/2ujwb0dm4jsorgk/?name=Omniata_Docs_Projects_Example1.png</span> 
     <span class="markup">"</span> 
     </p> 
    </div> 
</div> 

합니다. 현재 wkik xsl sheet을 기반으로 자신의 xsl 시트를 작성해야합니다. 나는 거기에 적은 수동 솔루션이나 누군가가 이전에 이런 일을하기를 바라고 있습니다.

답변

0

REST API를 사용하여이 작업을 수행해야하는 경우 현재 가장 좋은 방법은 플러그인을 작성하고 변환을 수행하는 자체 REST API를 구현하는 것입니다. HTML로 저장 형식을 변환하여 당신의 방법에 당신을 시작해야이 같은

뭔가 :

public String convertStorageToView(int pageId) 
{ 
    Page page = pageManager.getById(pageId);   
    String storage = page.getBodyAsString(); 

    try 
    { 
     final ConversionContext conversionContext = new DefaultConversionContext(page.toPageContext()); 

     return xhtmlContent.convertStorageToView(storage, conversionContext); 
    } 
    catch (XhtmlException e) 
    { 
     e.printStackTrace(); 
    } 
    catch (XMLStreamException e) 
    { 
     e.printStackTrace(); 
    } 

    return null; 
} 

또한 REST module 작성해야합니다.

+0

나는 왜 이것이 downvoted 되었을지 모르겠다. 주석이 유용 할 것입니다. – dvdsmpsn

1

원격 API를 통해 renderContent 메서드를 호출하십시오. 콘텐츠가 이전 형식 인 경우 convertWikiToStorageFormat 메서드도 있습니다.

0

다른 답변에서도 이미 설명한 것처럼 비슷하지만 제게는 xhtmlContent를 사용해야한다는 것이 명확하지 않았습니다. 생성자를 통해 인스턴스를 쉽게 얻을 수 있습니다.

public class MyServlet extends HttpServlet { 

    private Logger LOGGER = Logger.getLogger(getClass()); 

    private final PageManager pageManager; 
    private final XhtmlContent xhtmlContent; 


    public static final String PARAM_PAGE_ID = "pageId"; 


    public MyServlet(PageManager pageManager, XhtmlContent xhtmlContent) { 
    this.pageManager = pageManager; 
     this.xhtmlContent = xhtmlContent; 
    } 

    @Override 
    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException { 
     //fetch page or blogpost 
     ContentEntityObject page = pageManager.getPage(Long.parseLong(request.getParameter(PARAM_PAGE_ID))); 
     if (page == null) { 
      page = pageManager.getBlogPost(Long.parseLong(request.getParameter(PARAM_PAGE_ID))); 
     } 
     if (page != null) { 
      String htmlContent = ""; 
      final ConversionContext conversionContext = new DefaultConversionContext(page.toPageContext()); 
      try { 
       htmlContent = xhtmlContent.convertStorageToView(page.getBodyAsString(), conversionContext); 
      } catch (XMLStreamException e) { 
       htmlContent = "ERROR ON EXPORT"; 
       LOGGER.error(e); 
      } catch (XhtmlException e) { 
       htmlContent = "ERROR ON EXPORT"; 
       LOGGER.error(e); 
      } 

     } else { 
     //do some errorhandling here 
    } 
    //.. do something with the content .. render it in a velocity file for example 
    } 

예를 들어 속도 파일에서 데이터를 렌더링하거나 응답에서 직접 쓸 수 있습니다.