TransformerHandler для вывода разделов CDATA - PullRequest
1 голос
/ 25 сентября 2011

Я пытаюсь вывести раздел CDATA, используя приведенный ниже код.В то время как другие декларации соблюдаются, разделы CDATA по-прежнему отображаются в виде обычного текста без тегов (CDATA).Что я делаю не так?

    private TransformerHandler getHandler(StringWriter sw) {
        SAXTransformerFactory stf = (SAXTransformerFactory)SAXTransformerFactory.newInstance();
        TransformerHandler th = null;
        th = stf.newTransformerHandler();

        th.getTransformer().setOutputProperty(OutputKeys.CDATA_SECTION_ELEMENTS, "{ns1}elem");
        th.getTransformer().setOutputProperty(OutputKeys.INDENT, "yes");
        th.getTransformer().setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
        th.setResult(new StreamResult(sw));
    }

1 Ответ

1 голос
/ 19 февраля 2012

Попробуйте перечитать раздел JavaDoc для OutputKeys.CDATA_SECTION_ELEMENTS: http://docs.oracle.com/javase/6/docs/api/javax/xml/transform/OutputKeys.html#CDATA_SECTION_ELEMENTS

... а также ссылочное объяснение того, как задать литерал QName http://docs.oracle.com/javase/6/docs/api/javax/xml/transform/package-summary.html#qname-delimiter

Значение параметра, которое вы указываете "{ns1} elem", НЕ похоже на то, что оно включает в себя URI пространства имен, а скорее похоже на префикс пространства имен (ns1). Узнайте, что такое объявление "xmlns: ns1", и включите URI пространства имен в литерал QName.

Пример (при условии, что объявление пространства имен для префикса ns1 выглядит как xmlns: ns1 = "http://softee.org", вы должны указать;

setOutputProperty (OutputKeys.CDATA_SECTION_ELEMENTS, "{http://softee.org}elem");

...