XSLT 2.0 xsl:value-of元素分隔符属性似乎不适用于内置Java 1.7 XSLT处理器.这是示例(从XSLT 2nd ed.的第4章略作编辑以减小大小):
XML文件
XSLT文件
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
Java代码
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")));
}
}
代码运行时,将产生以下输出文件:
Chevrolet
…与书中描述的相反:
Chevrolet, Ford, Volkswagen
我在Ubuntu Precise中使用Java 1.7,并且TransformerFactory实例的类名报告为(在上述Java代码的a行中),其内容为:
com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl
更新
我进行了实验,并将XSLT文件中的spacer属性重命名为SeparatorBOO,代码继续运行而不会抱怨,并产生完全相同的输出.因此,似乎XSLT 2.0分隔符属性根本无法识别?