私は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
}
}
どうすれば修正できるか、何かアイデアはありますか?おそらく元の宣言を削除せずに。
ありがとう!!