2013-11-25 2 views
0

xml에 html 콘텐츠가 포함 된 태그가 포함되어 있습니다. htmlxsl-fo으로 변환해야합니다. 호출이 HTML 내용에 템플릿을 적용 할 때,템플릿에서 Xml 콘텐츠를 인식하지 못했습니다.

<xsl:template match ="rtf"> 
    <fo:block-container> 
     <fo:block> 
     <xsl:call-template name ="ConvertHtmlToXslfo"> 
      <xsl:with-param name ="content"> 
      <xsl:value-of select ="@rtfAsHtml" disable-output-escaping ="yes"/> 
      </xsl:with-param> 
     </xsl:call-template> 
     </fo:block> 
    </fo:block-container> 
    </xsl:template> 

    <xsl:template name="ConvertHtmlToXslfo"> 
    <xsl:param name ="content"></xsl:param> 
    <fo:block-container> 

     <xsl:apply-templates select="msxsl:node-set($content)"/> <!--here is the problem--> 

    </fo:block-container> 
    </xsl:template> 

    <xsl:template match ="div"> 
    <fo:block-container> 
     <!--more code here--> 
    </fo:block-container> 
    </xsl:template> 

    <xsl:template match ="p"> 
    <fo:block> 
     <!--more code here--> 
    </fo:block> 
    </xsl:template> 

    <xsl:template match ="span"> 
    <fo:inline> 
     <!--more code here--> 
    </fo:inline> 
    </xsl:template> 

그러나 문제가 : 여기 내 XSLT 코드입니다. 해당 템플릿은 그것을 인식하지 못합니다. XSL-FO이 HTML 태그를 변환하는 방법을

<rtf rtfAsHtml="&lt;div &gt;&lt;p &gt;&lt;span&gt;Hi!&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;"/> 

어떤 생각 :

여기에서 XML HTML을 태그 속성은 무엇입니까?

감사합니다.

+0

입력 파일에 네임 스페이스 선언이 있습니까? 또한 "rtf"를 문서 노드로 사용할 수 있다면 입력 내용이 HTML이 아닌 RTF 인 것 같습니다. –

+0

@ MathiasMüller. 아니요, 내 입력에는 네임 스페이스가 없습니다. 그리고, 내 입력은 rtf에서 변환 된 html을 포함하는 xml 태그입니다. 하지만 그것은 html입니다. – Jacob

답변

1

문제는 XML/HTML 콘텐츠가 이스케이프 처리되는 것입니다. disable-output-escaping을 적용하려고 시도하지만 출력 파일이나 스트림에 쓰는 경우에만 작동합니다. 따라서 실제로는 효과가 크지 않은 템플릿에 대해 이스케이프 처리되지 않은 속성 컨텐츠를 실제로 제출하는 것입니다. 당신이 사용하는,하지만 당신은 색슨를 사용하는 경우, 당신은 색슨을 적용하려고 할 수 XSLT 파서의 종류

확실하지 : 구문 분석 :

http://saxonica.com/documentation9.4-demo/html/extensions/functions/parse.html

이 잘 될 속성의 내용을 필요로 않습니다 - 형성. 그렇지 않다면, 당신은 시도 할 수 :

http://saxonica.com/documentation9.4-demo/html/extensions/functions/parse-html.html

HTH를!

+0

감사합니다. 당신 말이 맞아요. 하지만 난 Microsoft XslCompiledTransform을 사용하고 있습니다. – Jacob

+0

@jacob 안타깝게도 .Net에서 구문 분석 함수에 해당하는 것으로 보이지 않습니다. 물론 Saxon.Net으로 되돌릴 수 있습니다. 다른 대안은 자신의 XPath 확장 함수를 만드는 것입니다. 나는 stackoverflow에 예제를 보여주는 방법을 발견 : http://stackoverflow.com/questions/2320505/using-ms-xpath-functions-inside-xpathexpression – grtjn

+0

"이 파서가이 답변과 비슷한 것을 사용하는 것이 가능할 수도 있습니다. 이스케이프 처리 된 XML "은 XSLT에서 구현됩니다. http://stackoverflow.com/a/20150995/407651. – mzjn

관련 문제