1

私はxml文字列コードを持っています。この文字列は適切にフォーマットされているかどうかに関係なく、適切なフォーマットの xml 文字列を返す必要があります。

私はこのコードを使用しましたが、うまくいきました:

try {
            final Document document = parseXmlFile(code);
                OutputFormat format = new OutputFormat(document);
            format.setLineWidth(65);
            format.setIndenting(true);
            format.setIndent(2);
            Writer out = new StringWriter();
            XMLSerializer serializer = new XMLSerializer(out, format);
            serializer.serialize(document);
            newcode = out.toString();
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
private Document parseXmlFile(String in) {
    try {
        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
        DocumentBuilder db = dbf.newDocumentBuilder();
        InputSource is = new InputSource(new StringReader(in));
        return db.parse(is);
    } catch (ParserConfigurationException e) {
        throw new RuntimeException(e);
    } catch (SAXException e) {
        throw new RuntimeException(e);
    } catch (IOException e) {
        throw new RuntimeException(e);
    }
}

しかし、次の宣言で xml 文字列のバグを見つけました。

<?xml version=

1.0 エンコーディング= utf-8 ?>

与えられたエラーは次のとおりです。

org.xml.sax.SAXParseException: XML 宣言の「バージョン」に続く値は、引用符で囲まれた文字列でなければなりません。

このコードでも試しましたが、同じエラーが発生しました:

private static String prettyFormat(String input, int indent) {
    try {
        Source xmlInput = new StreamSource(new StringReader(input));
        StringWriter stringWriter = new StringWriter();
        StreamResult xmlOutput = new StreamResult(stringWriter);
        TransformerFactory transformerFactory = TransformerFactory.newInstance();
        transformerFactory.setAttribute("indent-number", indent);
        Transformer transformer = transformerFactory.newTransformer(); 
        transformer.setOutputProperty(OutputKeys.INDENT, "yes");
        transformer.transform(xmlInput, xmlOutput);
        return xmlOutput.getWriter().toString();
    } catch (Exception e) {
        throw new RuntimeException(e); // simple exception handling, please review it
    }
}

どうすれば修正できるか、何かアイデアはありますか?おそらく元の宣言を削除せずに。

ありがとう!!

4

0 に答える 0