Трансформатор избегает CR - PullRequest
0 голосов
/ 17 октября 2019

Предложите следующую программу:

    import java.io.StringReader;

    import javax.xml.transform.OutputKeys;
    import javax.xml.transform.Transformer;
    import javax.xml.transform.TransformerFactory;
    import javax.xml.transform.stream.StreamResult;
    import javax.xml.transform.stream.StreamSource;

    public class CrDemo {
        public static void main(String[] args) throws Exception {
            final String xml = "<a>foo&#13;\nbar&#13;\n</a>";
            final TransformerFactory tf = TransformerFactory.newInstance();
            final Transformer t = tf.newTransformer();
            t.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
            t.setOutputProperty(OutputKeys.INDENT, "no");
            t.setOutputProperty(OutputKeys.STANDALONE, "yes");
            t.transform(new StreamSource(new StringReader(xml)), new StreamResult(System.out));
        }
    }

Вывод выглядит следующим образом:

    <a>foo&#13;
    bar&#13;
    </a>

Возможно ли предотвратить выход трансформатора из CR?

1 Ответ

0 голосов
/ 17 октября 2019

Если входной XML содержит буквенные символы CR, они будут удалены во время синтаксического анализа. XML-парсеры нормализуют окончания строк до одного символа NL;но это не применяется, если CR экранируется как &#13;.

Так что, если текстовый узел содержит символ CR, процессор XSLT предполагает, что вы приложили много усилий, чтобы поместить его туда и что вы действительно этого хотитеи поэтому выводит его таким образом, чтобы он выдержал циклическое переключение, когда результирующий сериализованный вывод повторно обрабатывается анализатором XML.

Конечно, вы можете избавиться от символов CR в вашем XSLTкод, как вы можете избавиться от любых других символов. Но это не произойдет автоматически.

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