XSLT 2.0 XSL: Значение- из элемента, как представляется, не будет работать с помощью встроенного в Java 1.7 процессора XSLT сепаратор атрибута , Вот пример (слегка отредактированный из главы 4 XSLT 2nd ed. для уменьшения размера):XSLT 2.0 XSL: Значение-сепаратор атрибута не работает в Java 1.7 с 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>
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
Я использую Java 1.7 в Ubuntu Precise и имя класса в TransformerFactory экземпляр сообщается (в линии-а кода Java выше), как:
com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl
UPDATE
Я экспериментировал и переименовал атрибут в файле XSLT в separatorBOO, и код продолжает работать без жалоб и дает тот же самый результат. Таким образом, казалось бы, атрибут XSLT 2.0 не распознается вообще?
Yeap, поместив saxon9he.jar в runtime classpath, сделал трюк –
- это саксон, единственный lib, который поддерживает преобразования xslt2 ?? – frewper