2011-01-31 3 views
0

XSLT를 사용하여 XSLT 웹 파트를 일부 추출하여 변환하려고합니다. 예를 들어, HEAD와 BODY 부분을 개별적으로 추출하고 싶습니다 (첫 번째 단계 일뿐입니다. 다음으로 일부 div를 추출 할 것입니다). 그리고 출력 XHTML 문서에서 사용합니다.xslt를 사용하여 xhtml 변환 - 웹 브라우저에 표시하는 데 문제가 있습니다.

<xsl:stylesheet version="2.0" 
    xmlns:xhtml="http://www.w3.org/1999/xhtml" 
    xmlns="http://www.w3.org/1999/xhtml" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:xs="http://www.w3.org/2001/XMLSchema" 
    exclude-result-prefixes="xhtml xsl xs"> 

<xsl:output 
    method="html" 
    omit-xml-declaration="yes" 
    doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN" 
    doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" 
    indent="yes"/> 


<xsl:template match="/"> 
    <HTML> 
     <xsl:apply-templates/> 
    </HTML> 
</xsl:template> 

<xsl:template match="xhtml:HTML/xhtml:BODY"> 
<xsl:copy-of select="." disable-output-escaping="yes" /> 
</xsl:template> 


<xsl:template match="xhtml:HTML/xhtml:HEAD"> 
    <xsl:copy-of select="." disable-output-escaping="yes"/> 
</xsl:template> 

</xsl:stylesheet> 

I는 소스 코드 (검증)이 www.wordpress.org/about 입력 XHTML로서 : 여기 XSLT 코드이다. 첫 번째 neko 정수기가 해고되고 (HTML-> XHTML) 내 xslt 변환이 발생합니다. I 출력 코드로 살펴하면 모든 것이 비슷합니다

원래 코드 : codepad.org/5D7MCXSk
코드를 변환 후 : 내가 웹 브라우저에서 열 때 http://codepad.org/fGzyAwF2 제외

, 나는 "흰 벽"을 얻을 - 아무 것도 나타나지 않습니다. 변환 된 사이트의 소스 코드 (chrome과 firefox 모두) 구문이 닫기 HEAD 태그까지 강조 표시됩니다. 그것은 매우 이상하고 나는 그것이 문제를 일으키는 것입니다.

도움이 될 것입니다. 사전에 감사

+0

잘하고 싶은 것이 명확하지 않습니다. e, 스타일 시트의 루트 요소는 XHTML 요소를 출력하기를 제안하는'xmlns = "http://www.w3.org/1999/xhtml"'을 가지고 있습니다. 'xsl : output'은 XHTML 문서를 출력하고 싶다고 제안합니다. 그러나 XHTML은 대소 문자를 구별하며 모든 요소와 속성은 소문자로 정의되어 있기 때문에 이름이'HTML' 인 리터럴 결과 요소가있는 이유를 알지 못합니다. 따라서 결과 요소에 소문자 및 속성 이름을 사용하는 것은 변환에 의해 생성 된 의미있는 XHTML 결과 문서를 얻는 첫 번째 단계입니다. –

+0

(첫 번째 코멘트가 너무 길어졌습니다). 입력이 XHTML이고 패턴의 XHTML 요소를 일치 시키려면 소문자 이름도 필요합니다. 'match = "xhtml : html/xhtml : head"' 여전히 문제가 있다면 먼저 text/html 또는 application/xml 또는 application/xml과 같은 XML MIME 유형으로 변환 결과를 제공하는지 여부와 두 번째로 만들려는 결과 문서의 두 가지를 알려주십시오. 귀하의 의견. –

+0

변환 클라이언트 측 또는 서버 측을 수행하고 있습니까?Content-Type 헤더 란 무엇입니까? –

답변

1

그래서 http://codepad.org/5D7MCXSk (코드 1) http://wordpress.org/about/ (코드 2)의 소스 코드와 동일한 것 같습니다 당신이 "마네 키 네코 청정기"이 코드를 처리하는 (하나 그것은 이것이다 : http://nekohtml.sourceforge.net/) 결과 http://codepad.org/fGzyAwF2 (코드 3)의 문서 틀 렸으면 고쳐줘.

코드 3이 브라우저에 아무 것도 표시하지 않는 이유는 <HEAD> 끝에있는 자체 닫음 <SCRIPT/> 인 것 같습니다. YMMW,하지만 내 테스트에서 어떤 이유로 브라우저는 그것을 좋아하지 않았다.

XSLT 코드에 약간 결함이 있지만 코드 3을 입력으로 제공하면 출력이 생성됩니다. 입력 파일의 기형 (self closing script 요소)은 변환시 보존됩니다.

일부 무작위 노트 :

  • 원래의 입력 (코드 1) 잘 XML을 형성하고, 그래서
  • <xsl:copy-of>이 속성을 disable-output-escaping
  • 이없는 당신은 "정화"할 필요가 없습니다 method="html"을 사용할 때 html이 네임 스페이스를 사용하지 않기 때문에 출력 문서의 기본 네임 스페이스를 정의하는 것은 의미가 없습니다. (xhtml과 다름)
+0

먼저 Neko 정제기 (링크에서와 동일)를 실행 한 다음 XSLT 변환을 실행합니다. WordPress가 유효한 XHTML 사이트라는 것을 알고 있지만 전체 메커니즘은 다른 사이트에서도 작동합니다. 이것은 단지 출발점 일뿐입니다. 감사합니다 –

+0

당신이 옳다 - 문제는 HEAD 섹션의 끝 부분에 자기 폐쇄

관련 문제