java.lang.IllegalArgumentException:不支持:indent-number

sen*_*ale 9 java xml xslt

public String filter(String message) {
        if (message == null) {
            return null;
        }

        // Remove formatting, transformer fails to handle wrong indentation correctly.
        message = message.replaceAll(">\\s*[\\r\\n]+\\s*", ">");
        message = message.replaceAll("\\s*[\\r\\n]+\\s*", " "); // for wrapped attribute lists

        Source xmlInput = new StreamSource(new StringReader(message));
        StringWriter stringWriter = new StringWriter();
        try {
            TransformerFactory transformerFactory = TransformerFactory.newInstance();
            transformerFactory.setAttribute("indent-number", INDENT); // for Java 6

            Transformer transformer = transformerFactory.newTransformer();
            transformer.setOutputProperty(OutputKeys.INDENT, "yes");
            transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", INDENT.toString()); // Java 1.5
            transformer.transform(xmlInput, new StreamResult(stringWriter));

            String pretty = stringWriter.toString();
            pretty = pretty.replace("\r\n", "\n");
            return pretty;
        } catch (TransformerException e) {
            if (e.getCause() != null && e.getCause() instanceof SAXParseException) {
                return message;
            }
            throw new RuntimeException(e);
        }
    }
Run Code Online (Sandbox Code Playgroud)

但我在这里得到例外:

transformerFactory.setAttribute("indent-number", INDENT); // for Java 6
Run Code Online (Sandbox Code Playgroud)

java.lang.IllegalArgumentException:不支持:indent-number

我的java:

java version "1.6.0_33"
Run Code Online (Sandbox Code Playgroud)

为什么我得到这个错误?

Dim*_*ris 13

我通过评论此行来修复该异常:

transformerFactory.setAttribute("indent-number", indent);
Run Code Online (Sandbox Code Playgroud)

并添加此行:

transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "2");
Run Code Online (Sandbox Code Playgroud)

即使浏览器中出现的限制不正确,例外也就消失了.


Per*_*ion -1

您应该使用预定义的常量OutputKeys.INDENT,或者如果您确实坚持对值进行硬编码,则它应该是“缩进”,而不是“缩进数”。

  • 这还不够:它将元素放在新行上,但不添加选项卡...... (2认同)