栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

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

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

我想使用JAXP转换API,如果您想链接转换,那么http://docs.oracle.com/javaee/1.4/tutorial/doc/JAXPXSLT8.html就有一个示例,使用

XMLFilter
通过创建的
SAXTransformerFactory.newXMLFilter

这是一个示例Java代码,该代码显示了如何使用样式表文件名数组和设置过滤器链:

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);    }}

如果输入是像

<root>    <foo>bar</foo>   </root>

和样式表做例如

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">    <xsl:template match="@* | node()">        <xsl:copy> <xsl:apply-templates select="@* | node()"/>        </xsl:copy>    </xsl:template>    <xsl:template match="/node()[last()]">        <xsl:copy> <xsl:apply-templates select="@* | node()"/>        </xsl:copy>        <xsl:comment>sheet 1</xsl:comment>    </xsl:template></xsl:stylesheet>

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">    <xsl:template match="@* | node()">        <xsl:copy> <xsl:apply-templates select="@* | node()"/>        </xsl:copy>    </xsl:template>    <xsl:template match="/node()[last()]">        <xsl:copy> <xsl:apply-templates select="@* | node()"/>        </xsl:copy>        <xsl:comment>sheet 2</xsl:comment>    </xsl:template></xsl:stylesheet>

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">    <xsl:template match="@* | node()">        <xsl:copy> <xsl:apply-templates select="@* | node()"/>        </xsl:copy>    </xsl:template>    <xsl:template match="/node()[last()]">        <xsl:copy> <xsl:apply-templates select="@* | node()"/>        </xsl:copy>        <xsl:comment>sheet 3</xsl:comment>    </xsl:template></xsl:stylesheet>

那么最终的输出是

<?xml version="1.0" encoding="UTF-8"?><root>    <foo>bar</foo>   </root><!--sheet 1--><!--sheet 2--><!--sheet 3-->

因此样式表全部按照输入数组的顺序应用。一旦知道所需顺序,就很容易从目录中的文件列表中建立这样的数组。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/515599.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号