Can';不要让Java创建的XML与XSL一起工作

Can';不要让Java创建的XML与XSL一起工作,java,xml,xslt,dom,Java,Xml,Xslt,Dom,我正在使用DOM创建一个XML,我用explorer打开XML,它看起来很好。 在那之后,我为它创建了一个XSL,通过编程将对它的引用添加到XML和boom中,它就不再工作了 我在浏览器中检查代码并将文件保存为XML。 我用notepad++打开XML,注意到npp显示XML文件是用“UCS-2 LE BOM”编码的,即使XML标题说它在“UTF-8”中,我不知道这是因为从浏览器保存还是因为Java transformer 无论如何,我将npp中的文件编码更改为“UTF-8”,再次打开它,它就可

我正在使用DOM创建一个XML,我用explorer打开XML,它看起来很好。 在那之后,我为它创建了一个XSL,通过编程将对它的引用添加到XML和boom中,它就不再工作了

我在浏览器中检查代码并将文件保存为XML。 我用notepad++打开XML,注意到npp显示XML文件是用“UCS-2 LE BOM”编码的,即使XML标题说它在“UTF-8”中,我不知道这是因为从浏览器保存还是因为Java transformer

无论如何,我将npp中的文件编码更改为“UTF-8”,再次打开它,它就可以完美地工作。 我已尝试将转换器的编码属性
transformer.setOutputProperty(“encoding”,“ISO-8859-1”)
更改为不同的值,但它只会更改XML头。 我在谷歌上搜索了一下,但到目前为止还没有找到任何有效的方法

这是创建XML的代码

    package modelo;

import java.awt.Desktop;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerConfigurationException;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;


public class DAOXML {

    private static final String rutaUno = ".\\VerLibro.xml";
    private static final String rutaListado = ".\\listado.xml";


    public static boolean toXML(ArrayList<Libro> libros2) {
        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
        final String rutaActual = libros2.size()>1?rutaListado:rutaUno;


        try {
            DocumentBuilder db = dbf.newDocumentBuilder();
            Document doc = db.newDocument();

            doc.setDocumentURI(rutaActual);
            doc.setXmlStandalone(true);

            Element libros = doc.createElement("libros");


            for(Libro l : libros2) {
                Element libro = doc.createElement("libro");
                Element isbn = doc.createElement("isbn");
                isbn.setTextContent(l.getISBN());
                libro.appendChild(isbn);
                Element editorial = doc.createElement("editorial_apellidos");
                editorial.setTextContent(l.getEditorial_apellidos());
                libro.appendChild(editorial);
                Element autor = doc.createElement("autor");
                autor.setTextContent(l.getAutor());
                libro.appendChild(autor);
                Element categoria = doc.createElement("categoria");
                categoria.setTextContent(l.getCategoria());
                libro.appendChild(categoria);
                Element titulo = doc.createElement("titulo");
                titulo.setTextContent(l.getTitulo());
                libro.appendChild(titulo);
                Element ubicacion = doc.createElement("ubicacion");
                ubicacion.setTextContent(l.getUbiacion());
                libro.appendChild(ubicacion);       
                libros.appendChild(libro);
            }
            doc.appendChild(libros);


            TransformerFactory transformerFactory = TransformerFactory.newInstance();
            Transformer transformer = transformerFactory.newTransformer();
        //  transformer.setOutputProperty("encoding", "ISO-8859-1");
            DOMSource source = new DOMSource(doc);
            StreamResult result = new StreamResult(new File(rutaActual));
            //result.setWriter(new PrintWriter(new File(rutaActual), "UTF-8"));

            transformer.transform(source, result);

            if(rutaActual == rutaUno) {
                Node pi = doc.createProcessingInstruction("xml-stylesheet", "type=\"text/xsl\" href=\"VerLibro.xsl\"");
                doc.insertBefore(pi, libros);
            }
            else {
                Node pi = doc.createProcessingInstruction("xml-stylesheet", "type=\"text/xsl\" href=\"listado.xsl\"");
                doc.insertBefore(pi, libros);
            }


            Desktop.getDesktop().open(new File(rutaActual));

            return true;
        } catch (ParserConfigurationException e) {
            e.printStackTrace();

         } catch (TransformerConfigurationException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (TransformerException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        return false;
    }


}
packagemodelo;
导入java.awt.Desktop;
导入java.io.File;
导入java.io.FileNotFoundException;
导入java.io.FileOutputStream;
导入java.io.IOException;
导入java.io.PrintWriter;
导入java.util.ArrayList;
导入javax.xml.parsers.DocumentBuilder;
导入javax.xml.parsers.DocumentBuilderFactory;
导入javax.xml.parsers.parserConfiguration异常;
导入javax.xml.transform.OutputKeys;
导入javax.xml.transform.Transformer;
导入javax.xml.transform.TransformerConfiguration异常;
导入javax.xml.transform.TransformerException;
导入javax.xml.transform.TransformerFactory;
导入javax.xml.transform.dom.DOMSource;
导入javax.xml.transform.stream.StreamResult;
导入org.w3c.dom.Document;
导入org.w3c.dom.Element;
导入org.w3c.dom.Node;
公共类DAOXML{
私有静态最终字符串rutaUno=“.VerLibro.xml”;
私有静态最终字符串rutaListado=“.\\listado.xml”;
公共静态布尔toXML(ArrayList libros2){
DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance();
最终字符串rutaActual=libros2.size()>1?rutalisto:rutaUno;
试一试{
DocumentBuilder db=dbf.newDocumentBuilder();
Document doc=db.newDocument();
setDocumentURI文件(rutaActual);
文件setXmlStandalone(true);
Element libros=doc.createElement(“libros”);
对于(Libro l:libros2){
元素libro=doc.createElement(“libro”);
元素isbn=doc.createElement(“isbn”);
isbn.setTextContent(l.getISBN());
儿童图书馆(isbn);
编辑元素=doc.createElement(“编辑元素”);
setxtcontent(l.getEditorial_apellidos());
《儿童图书馆》(社论);
元素自动=doc.createElement(“自动”);
autor.setTextContent(l.getAutor());
附加儿童图书馆(自动);
元素categoria=doc.createElement(“categoria”);
categoria.setTextContent(l.getCategoria());
附属儿童图书馆(分类);
元素titulo=doc.createElement(“titulo”);
titulo.setTextContent(l.getitulo());
libro.appendChild(提特罗);
元素ubicacion=doc.createElement(“ubicacion”);
ubicacion.setTextContent(l.getUbiacion());
附属图书馆(ubicacion);
libros.appendChild(libro);
}
儿童医生(libros);
TransformerFactory TransformerFactory=TransformerFactory.newInstance();
Transformer Transformer=transformerFactory.newTransformer();
//transformer.setOutputProperty(“编码”、“ISO-8859-1”);
DOMSource=新的DOMSource(doc);
StreamResult=新的StreamResult(新文件(rutaActual));
//result.setWriter(新的PrintWriter(新文件(rutaActual),“UTF-8”);
变换(源、结果);
if(rutaActual==rutaUno){
节点pi=doc.createProcessingInstruction(“xml样式表”,“类型=\”text/xsl\”href=\“VerLibro.xsl\”);
插入之前的文件(pi,libros);
}
否则{
节点pi=doc.createProcessingInstruction(“xml样式表”,“类型=\”text/xsl\”href=\“listado.xsl\”);
插入之前的文件(pi,libros);
}
getDesktop().open(新文件(rutaActual));
返回true;
}捕获(ParserConfiguration异常e){
e、 printStackTrace();
}捕获(TransformerConfiguration异常e){
//TODO自动生成的捕捉块
e、 printStackTrace();
}捕获(转换异常e){
//TODO自动生成的捕捉块
e、 printStackTrace();
}捕获(IOE异常){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
返回false;
}
}

提前感谢。

在调用
transform()
之前,请尝试添加此行:


答案我不太清楚。拥有XML和XSL文件以及完整的工作示例会有所帮助?设计或转换XML的样式?XSLT是一种用于转换XML的专用语言。与其他通用语言一样,Java也带有XSLT处理器。因此,您可以直接在代码中应用xslt,而无需在xml中内联引用。我想使用xslt在html表中显示xml数据,我必须为xml和xslt创建两个单独的文件(这是学校作业),但使用xslt解析器创建文件可能是个好主意。我回家后会添加xslt代码
transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8");