XMLFilters может также использоваться для быстрого и легкого преобразования данных при помощи XSLT.
Само преобразование лежит вне сферы рассмотрения нашего учебника, но вот краткий взгляд на то, как вы можете применить его:
import javax.xml.transform.stream.StreamSource; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerFactory; import javax.xml.transform.sax.SAXTransformerFactory; import org.xml.sax.XMLFilter;
... public static void main (String args[]) { XMLReader xmlReader = null; try { SAXParserFactory spfactory = SAXParserFactory.newInstance(); spfactory.setValidating(false); SAXParser saxParser = spfactory.newSAXParser(); xmlReader = saxParser.getXMLReader(); TransformerFactory tFactory = TransformerFactory.newInstance(); SAXTransformerFactory saxTFactory = ((SAXTransformerFactory) tFactory); XMLFilter xmlFilter = saxTFactory.newXMLFilter(new StreamSource("surveys.xsl"));
xmlFilter.setParent(xmlReader); Serializer serializer = SerializerFactory.getSerializer( OutputProperties.getDefaultMethodProperties("xml")); serializer.setOutputStream(System.out);
xmlFilter.setContentHandler( serializer.asContentHandler() );
InputSource source = new InputSource("surveys.xml"); xmlFilter.parse(source); } catch (Exception e) { System.err.println(e); System.exit(1); } } ...
Сначала вам нужно создать фильтр - но вместо создания его с нуля, создайте фильтр, который специально предназначен для преобразования на основе таблицы стилей.
Затем, так же, как вы делали, когда выводили непосредственно в файл, создайте Serializer для вывода результата преобразования.
В основном фильтр выполняет преобразование, затем обрабатывает события на XMLReader. Однако, в конечном счете приемником являетсяSerializer.