2011-10-27 6 views
2

아주 간단한 xslt를 사용하여 html 페이지를 xml 파일로 변환합니다.XHTML to XML XSLT 변환

그러나 출발점은 나에게 직접적이지 않습니다. 첫 번째 목표는 <html> 태그를 <topic> 태그로 변환하는 것입니다.

내가 다음 XSLT했다 :이 XSLT를 실행 한 후 지금, 결과 XML 순수 원래 HTML 페이지의 같은 내용의이다 그러나

<xsl:template match="@*|node()"> 
    <xsl:copy> 
    <xsl:apply-templates select="@*|node()"/> 
    </xsl:copy> 
</xsl:template> 

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

<xsl:template match="html"> 
    <topic> 
    <xsl:text> Conversion Test</xsl:text> 
    </topic> 
</xsl:template> 

을 것 같습니다 세 번째 템플릿과 일치하는 것을 I (<html> 태그와 일치시키기 위해) 쓴 것이 결코 부딪치지 않습니다.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
    <head>..</head> 
    <body>...</body> 
</html> 

전문가 여기 나에게 조금 도움이 될 수 :처럼

소스 HTML 보인다?

+0

html의 예를 들려 줄 수 있습니까? (특히'xmlns = "http://www.w3.org/1999/xhtml"과 같은 네임 스페이스) –

+0

@DevNull, 소스 html로 내 질문을 업데이트했습니다. – Kevin

+0

감사합니다. 좋은 질문 +1 –

답변

4

XSLT 1.0 :

에 한번 당신의 xsl:stylesheetxmlns:x="http://www.w3.org/1999/xhtml"을 추가하고 match="x:html"에 일치하는 항목을 변경.

XSLT 2.0 :

를 어느 위의 방법을 사용하거나 일치 (들에서 네임 스페이스 접두사를 교체하십시오 : (당신은 당신이 원하는 무엇이든 선택할 수 있습니다 당신은 'x'를 사용할 필요가 없습니다. 참고))를 "*"(match="*:html")로 변경하십시오. xsl:stylesheetxpath-default-namespace="http://www.w3.org/1999/xhtml"을 추가 할 수도 있습니다.

+0

감사합니다. 예, html은 실제로 xhtml이고 제안 된 네임 스페이스에 넣은 XSLT1.0을 사용하고 있습니다. :) – Kevin

+0

소스 문서의 특성을 반영하도록 제목을 업데이트했습니다. – Kevin

+1

@Kevin - 대단히 환영합니다. 또한 XML 출력에 네임 스페이스를 사용하지 않으려면'exclude-result-prefixes = "# all"을'xsl : stylesheet'에 추가하십시오. (주의 :'# all'을'x'로 대체하여'x'를 특별히 제외 할 수 있습니다. –

0

첫 번째 템플릿을 제거하거나 모든 노드를 node()으로 일치시키는 것보다 구체적으로 만들 수 있습니다.

+0

신원 변환을 제거 하시겠습니까? –

+0

@lkuty, 첫 번째 템플릿을 제거하려고했습니다. 결과 XML은 단순히 마크 업이없는 큰 텍스트 노드입니다. 그것은 원본 HTML 페이지의 모든 텍스트를 포함합니다. – Kevin

+0

내가 틀렸어. 첫 번째 규칙은 세 번째 규칙에서 선택 될 수 있다고 생각했지만 사실 요소와 일치 패턴의 기본 우선 순위는'node() '보다 커서 따라서 문제가 될 수 없습니다. 나는 단지 NS에 대해 생각하지 않았다. – lkuty

0

XSLT의 목적은 XML 문서를 다른 문서로 변환하는 것입니다. HTML은 XML 문서가 아닙니다. XHTML은 XML이지만 실제로는 HTML로 다시 형식이 지정되므로 XSLT를 사용하여 원하는 작업을 쉽고 정확하게 수행 할 수 있을지 확실하지 않습니다.

+0

그래서 지금 당신은 제목을 업데이트합니다 :). 그게 내 문제를 반영합니다. – Rob