如何使用javax.xml.transform.Tansformer类在属性值周围打印单引号而不是双引号?

时间:2010-02-02 17:32:04

标签: java xml transform

我有以下功能:

private static void prettyPrint(Document doc, File destFile)
{
    TransformerFactory tfactory = TransformerFactory.newInstance();
    Transformer serializer;

    try
    {
        if( !destFile.getParentFile().exists() )
        {
            destFile.getParentFile().mkdirs();
        }

        serializer = tfactory.newTransformer();

        serializer.setOutputProperty(OutputKeys.INDENT, "yes");
        serializer.setOutputProperty(OutputKeys.ENCODING, "utf-8");

        try
        {
            serializer.transform(new DOMSource(doc),
                                 new StreamResult(new FileOutputStream(destFile)));
        }
        catch( FileNotFoundException e )
        {
            e.printStackTrace();
        }
    }
    catch (TransformerException e)
    {
        e.printStackTrace();
    }
}

我用它来“打印”我的XML。但是,它使用双引号打印属性值,而不是单引号。现在,我意识到XML与值的双引号和单引号无关,但是我提供XML的客户需要单引号。

那么,有人说,有没有人知道我可以设置的输出属性告诉变压器打印单引号而不是双引号?

感谢您的帮助,

B.J。

2 个答案:

答案 0 :(得分:2)

我不相信标准序列化器可以实现这一点。任何符合标准的XML解析器都应该在输入上处理双引号。您能找出客户的XML解析被破坏的原因,并可能将其解决吗?

另一方面,您在输出键中声明文档将是UTF8,但您似乎没有提供UTF8编码的编写器。这在Windows上可以正常工作,但在Solaris上会失败,默认情况下不是UTF8。为了获得最大的可移植性,您应该确保通过明确告知Java使用UTF8实际编写输出流。只是在XML标题中声明它是不够的。

答案 1 :(得分:1)

您可以对XML进行后处理以用单引号替换双引号,尽管这会是一个冒险的过程,因为文本节点也可能包含您不想更改的双引号。属性值可以包含单引号,当用双引号括起来时它可以正常工作但如果被单引号包围则必须进行转义。我想我是在谈论自己的想法,但我想这可能是可行的。