在处理之前使用XSLT转换XML文档

时间:2013-07-04 18:48:58

标签: java xml xslt

我有一个XML文档,我将在Java应用程序中处理它。 但是,我需要使用XSLT文件对其进行转换,以便能够在之后进行处理。

这就是我目前加载XML文件的方式。

    DocumentBuilderFactory factory;
    DocumentBuilder docbuilder;
    Document doc;
    Element root;

    factory = DocumentBuilderFactory.newInstance();
    try
    {
        // open up the xml document
        docbuilder = factory.newDocumentBuilder();
        doc = docbuilder.parse(new FileInputStream(m_strFileName));

        // get the document type
        doctype = doc.getDoctype();
        strDTD = doctype.getPublicId();

        // get the root of the document
        root = doc.getDocumentElement();
        // get the list of child nodes
        nodes = root.getChildNodes();
        // now process each node
        ...
    }
    catch(ParserConfigurationException e)
    {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    catch(SAXException e)
    {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

如何将XSLT转换应用于XML文档,然后获取新文档的根节点?

请注意,我想要将生成的xml树写入磁盘。

2 个答案:

答案 0 :(得分:2)

您可以将DOMSource转换为DOMResult,请参阅http://docs.oracle.com/javase/6/docs/api/javax/xml/transform/dom/DOMResult.html。请注意,XSLT / XPath使用名称空间对XML进行操作,以确保使用可识别名称空间的文档构建器工厂。

答案 1 :(得分:2)

经过长时间的研究后......终于找到了可接受的解决方案(至少对我而言)。

以下是我能够成功适应的样本:

TransformerFactory factory = TransformerFactory.newInstance();
Templates template = factory.newTemplates(new StreamSource(new FileInputStream("xsl.xlt")));
Transformer xformer = template.newTransformer();
Source source = new StreamSource(new FileInputStream("in.xml"));
DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
Document doc = builder.newDocument();
Result result = new DOMResult(doc);
xformer.transform(source, result);

从这里采取: Transforming an XML File with XSL into a DOM Document