2013-05-24 1 views
3

자바 1.7에서 작동하지 않는 속성 XSLT 2.0 XSL : 세퍼레이터 특성 내장 자바 1.7 XSLT 프로세서가 작동하지 않을 것으로 보인다 소자 가치의 .XSLT 2.0 XSL : 값-의 세퍼레이터 apache.xalan

XML 파일

<?xml version="1.0" encoding="utf-8"?> 
<cars> 
    <manufacturer name="Chevrolet"> 
    </manufacturer> 
    <manufacturer name="Ford"> 
    </manufacturer> 
    <manufacturer name="Volkswagen"> 
    </manufacturer> 
</cars> 

XSLT 파일

<?xml version="1.0" encoding="utf-8"?> 
<xsl:stylesheet version="2.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output method="text"/> 
    <xsl:template match="/"> 
     <xsl:value-of select="cars/manufacturer/@name" separator=", "/> 
    </xsl:template> 
</xsl:stylesheet> 

자바 코드

import javax.xml.transform.*; 
import javax.xml.transform.stream.StreamResult; 
import javax.xml.transform.stream.StreamSource; 
import java.io.File; 
import java.io.IOException; 
import java.net.URISyntaxException; 

public class FooMain { 
    public static void main(String[] args) throws IOException, URISyntaxException, TransformerException { 
     TransformerFactory factory = TransformerFactory.newInstance(); 
     System.out.println("transformer factory class: "+factory.getClass()); // line-a 
     Source xslt = new StreamSource(new File("transform.xslt")); 
     Transformer transformer = factory.newTransformer(xslt);                                          
     Source text = new StreamSource(new File("input.xml")); 
     transformer.transform(text, new StreamResult(new File("output.html"))); 
    } 
} 

코드 : 여기 (약간 크기를 줄일 수 XSLT 2nd ed.의 제 4 장에서 편집)의 예이다 실행되면 다음 출력 파일이 생성됩니다.

라인-A에

Chevrolet, Ford, Volkswagen 

나는 우분투 (정밀하고 인스턴스가보고 된 하는 TransformerFactory의 클래스를 자바 1.7를 사용하고을 :이 책에서 설명 무엇에 반대

Chevrolet 

... 위와 같이 자바 코드)의 :

com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl 

UPDATE

구분 기호XSLT 파일의 이름을 구분자 BOO으로 변경했으며 코드는 불평하지 않고 계속 실행되고 똑같은 출력을 생성합니다. XSLT 2.0 구분 기호 속성이 전혀 인식되지 않는 것 같습니다.

답변

4

Xalan이 xslt2 변환을 지원하지 않으므로 다른 팩토리를 제공해야합니다. 색슨을 사용해보십시오. 클래스 패스에 공급자가없는 경우 자바가 임베디드 버전을 사용하기 때문에 클래스 패스에 항아리 만 놓아두면됩니다.

+1

Yeap, saxon9he.jar을 런타임 클래스 경로에 넣는 것은 트릭 –

+0

이 xslt2 변환을 지원하는 유일한 libx 인 saxon입니까 ?? – frewper