Как я могу напечатать одинарные кавычки вокруг значений атрибутов вместо двойных кавычек с классом javax.xml.transform.Tansformer? - PullRequest
1 голос
/ 02 февраля 2010

У меня есть следующая функция:

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 ]

2 голосов
/ 02 февраля 2010

Я не верю, что это возможно со стандартным сериализатором. Любой совместимый со стандартами синтаксический анализатор XML должен обрабатывать двойные кавычки при вводе. Можете ли вы выяснить, почему синтаксический анализ XML клиента не работает, и, возможно, исправить это?

С другой стороны, вы заявляете в своих выходных ключах, что документ будет UTF8, но, похоже, вы не предоставляете записывающее устройство в кодировке UTF8. Это будет прекрасно работать в Windows, но не будет работать в Solaris, где по умолчанию НЕ UTF8. Для максимальной переносимости вы должны убедиться, что ваш выходной поток действительно будет записан с использованием UTF8, явно указав Java. Недостаточно просто объявить это в заголовке XML.

1 голос
/ 03 февраля 2010

Возможно, вы могли бы постобработать XML, чтобы заменить двойные кавычки одинарными, хотя это было бы рискованно, так как текстовые узлы также могут содержать двойные кавычки, которые вы не захотите менять. И значения атрибутов могут содержать одинарные кавычки, которые будут нормально работать, когда они заключены в двойные кавычки, но которые должны быть экранированы, если они заключены в одинарные кавычки. Я думаю, что сам отговариваюсь от этой идеи, но я думаю, что она может быть реализована.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...