2013-07-02 4 views
1

흥미로운 ... 레거시 시스템이 구현 된 방식으로 XSLT는 입력 XML 문서에서 HTML을 생성하는 데 사용됩니다. 페이지가 서버로 다시 POST 될 때 필요한 출력의 일부는 원본 XML 문서입니다. 예 : 이 소스 인 경우소스 문서를 출력 문서에 포함

<page> 
<head>Hello</head> 
</page> 
출력은 다음과 같이 보일 수 있습니다

:

<html> 
<head></head> 
<body> 
<script type='text/javascript'> 
    document.sourceXml = '<page><head>Hello</head></page>'; 
</script> 
</body> 
</html> 

(최근 단지 HTML로 방출 될 때까지 내가 올 수있는 주변의 XML은,이 최고의 작품입니다했다 레거시 시스템을 너무 많이 수정하지 않고).

<msxsl:script language="JScript" implements-prefix="user"> 
<![CDATA[ 
    function fnGetXML(oRootList) 
    { 
     var sXML=oRootList.item(0).documentElement.xml 
     return sXML; 
    } 
]]> 
</msxsl:script> 
<script type="text/javascript"> 
    document.pageXml = '<xsl:value-of disable-output-escaping="yes" select="user:fnGetXML(.)" />'; 
</script> 

이 새 버전과 함께, 다른 모든 XSLT 엔진에서 나누기 : 기존 XSLT를 출력으로 출력 원본 XML을 독점 <msxml:script> 태그를 사용 :이 실제 질문에 저를 제공

MSXML (특수 플래그를 켜지 않고 스크립트를 실행할 수 있음). 스트레이트 XSLT로 동일한 작업을 수행 할 수있는 방법이 있습니까?

답변

1

예, 매우 쉬운 방법이 있습니다. <xsl:copy-of select="/" />을 사용해주세요. 예 :

<xsl:template match="/"> 
    <html> 
    <head></head> 
    <body> 
    <script type='text/javascript'> 
     document.sourceXml = '<xsl:copy-of select="/" />'; 
    </script> 
    </body> 
    </html> 
</xsl:template> 

소스 XML에서 작은 따옴표를 사용할 수 있다면 자바 스크립트가 행복하지 않을 수 있습니다. 나는 이것이 당신에게 중요한지 여부를 알만큼 충분히 당신의 목적을 이해하고 있는지 확신하지 못합니다. 이 경우 XML을 HTML로 내보내는 것이 더 효과적 일 수 있습니다. 하지만 당신은 그렇게하고 싶지 않았고 당신의 이유가 무엇인지 모르겠습니다.

+0

나는 그것을하고 싶지 않은 주된 이유는 크로스 브라우저 호환성이다. 이 응용 프로그램은 현재 브라우저에서 MSXML을 사용하여이 XML 청크를 조작합니다.이 XML 청크는 jQuery의 XML 조작으로 대체하려고합니다. 내 다른 옵션은 XML을 묶기 위해'

관련 문제