如何使用任何循环为多个输入指定输入目录?

public class MultiXslt { public static void main(String[] args) throws TransformerException,ParserConfigurationException, SAXException, IOException { //source xslt StreamSource stylesource = new StreamSource("C:/Users/santhanamk/Desktop/newxslt/Xslt inputs/Idml0.xsl"); DocumentBuilderFactory docbFactory = DocumentBuilderFactory .newInstance(); DocumentBuilder dBuilder = docbFactory.newDocumentBuilder(); //source XML Document sourceDoc = dBuilder.parse("C:/Users/santhanamk/Desktop/newxslt/input.xml"); DOMSource source = new DOMSource(sourceDoc); TransformerFactory transformerFactory = TransformerFactory .newInstance(); Transformer transformer = transformerFactory .newTransformer(stylesource); Document document = dBuilder.newDocument(); DOMResult result = new DOMResult(document); transformer.transform(source, result); Node resultDoc = ((Document) result.getNode()).getDocumentElement(); System.out.println(resultDoc.getChildNodes().getLength()); // print the result StringWriter writer = new StringWriter(); Transformer transformer2 = transformerFactory.newTransformer(); transformer2.transform(new DOMSource(resultDoc), new StreamResult(writer)); String s = writer.toString(); } } 

实际上我有一个xml文件和多个xsl文件(C:/ Users / santhanamk / Desktop / newxslt / Xslt输入/ xsl列表)。 当我将xml和xsl0作为输入时,我需要将输出作为字符串。 因此,在得到输出后,我需要为xsl1提供与输入字符串相同的输出以获得另一个输出(字符串)。 然后我需要将输出作为xsl2的输入字符串来获取另一个输出。 当给定的源目录(C:/ Users / santhanamk / Desktop / newxslt / Xslt输入/ xsl列表)doest有任何新的xsl文件加载输出字符串时,它应该给出最终输出为xml!

我想如果你想链接转换,那么使用JAXP转换API然后http://docs.oracle.com/javaee/1.4/tutorial/doc/JAXPXSLT8.html有一个例子来做,使用用SAXTransformerFactory.newXMLFilter创建的XMLFilter

下面是一个示例Java代码,它显示了如何使用样式表文件名数组并设置一系列filter:

 import java.io.FileInputStream; import java.io.FileNotFoundException; import javax.xml.parsers.ParserConfigurationException; import javax.xml.parsers.SAXParserFactory; import javax.xml.transform.Result; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerConfigurationException; import javax.xml.transform.TransformerException; import javax.xml.transform.TransformerFactory; import javax.xml.transform.sax.SAXSource; import javax.xml.transform.sax.SAXTransformerFactory; import javax.xml.transform.stream.StreamResult; import javax.xml.transform.stream.StreamSource; import org.xml.sax.InputSource; import org.xml.sax.SAXException; import org.xml.sax.XMLFilter; import org.xml.sax.XMLReader; public class JAXPTransChain1 { public static void main(String[] args) throws FileNotFoundException, SAXException, ParserConfigurationException, TransformerException { String[] stylesheets = new String[] {"sheet1.xsl", "sheet2.xsl", "sheet3.xsl"}; String inputDoc = "input1.xml"; chainSheets(stylesheets, inputDoc, new StreamResult(System.out)); } private static void chainSheets(String[] stylesheets, String inputDoc, Result result) throws FileNotFoundException, ParserConfigurationException, SAXException, TransformerConfigurationException, TransformerException { InputSource input = new InputSource(new FileInputStream(inputDoc)); SAXParserFactory spf = SAXParserFactory.newInstance(); spf.setNamespaceAware(true); XMLReader reader = spf.newSAXParser().getXMLReader(); SAXTransformerFactory stf = (SAXTransformerFactory)TransformerFactory.newInstance(); XMLReader parent = reader; for (int i = 0; i < stylesheets.length; i++) { String sheetUri = stylesheets[i]; XMLFilter sheetFilter = stf.newXMLFilter(new StreamSource(new FileInputStream(sheetUri))); sheetFilter.setParent(parent); parent = sheetFilter; } Transformer proc = stf.newTransformer(); SAXSource transSource = new SAXSource(parent, input); proc.transform(transSource, result); } } 

如果输入是一个样本

  bar  

和样式表例如

           sheet 1   

           sheet 2   

           sheet 3   

那么最后的输出是

  bar  

所以样式表都按输入数组的顺序应用。 一旦知道了所需的顺序,就可以很容易地从目录中的文件列表中设置这样的数组。