在 Java 中将 XML-文件转换为字符串,无需操作或优化
Convert XML-File to string without manipulation or optimization in Java
我在使用 JDOM2 处理 XML 文件时遇到了一些问题。
我想在不进行任何操作或优化的情况下将 XML 文件转换为字符串。
那是我的 Java 代码:
SAXBuilder builder = new SAXBuilder();
File xmlFile = f;
try
{
Document document = (Document) builder.build(xmlFile);
xml = new XMLOutputter().outputString(document);
} catch (Exception e) {
System.out.println(e.getMessage());
}
return xml;
但是当我将我的字符串与原始 XML 文件进行比较时,我发现了一些变化。
原文:
<?xml version="1.0" encoding="windows-1252"?>
<xmi:XMI xmi:version="2.1" xmlns:uml="http://schema.omg.org/spec/UML/2.0" xmlns:xmi="http://schema.omg.org/spec/XMI/2.1" xmlns:thecustomprofile="http://www.sparxsystems.com/profiles/thecustomprofile/1.0" xmlns:SoaML="http://www.sparxsystems.com/profiles/SoaML/1.0">
和字符串:
<?xml version="1.0" encoding="UTF-8"?>
<xmi:XMI xmlns:xmi="http://schema.omg.org/spec/XMI/2.1" xmlns:SoaML="http://www.sparxsystems.com/profiles/SoaML/1.0" xmlns:thecustomprofile="http://www.sparxsystems.com/profiles/thecustomprofile/1.0" xmlns:uml="http://schema.omg.org/spec/UML/2.0" xmi:version="2.1">
所有变音符号 (ä, ö , ü) 也都改变了。我会得到类似的东西:“�”而不是“ä”。
有什么办法可以阻止这种行为吗?
看看这是否适合你。
//filename is filepath string
BufferedReader br = new BufferedReader(new FileReader(new File(filename)));
String line;
StringBuilder sb = new StringBuilder();
while((line=br.readLine())!= null){
sb.append(line.trim());
}
试试这个:
String xmlToString=FileUtils.readFileToString(new File("/file/path/file.xml"));
为此你需要 Commons-io jar。
首先,正如其他人所说,您不应使用任何 XML 处理。只需将文件作为文本文件阅读即可。
其次,您的元音变音字符显示为“�”是由于使用了不正确的字符集(编码)。字符集错误可能在您的代码中,也可能是 XML 文件。
原始 XML 文件包含 encoding="windows-1252"
,但 XML 以 UTF-8 以外的任何方式编码是不寻常的,因此我怀疑该文件确实是 UTF- 8 文件及其声称使用的编码不正确。
尝试在读取文件时强制使用 UTF-8。无论如何,在将字节转换为文本时指定字符集是一个好习惯:
String xml = new String(
Files.readAllBytes(xmlFile.toPath()), StandardCharsets.UTF_8);
我在使用 JDOM2 处理 XML 文件时遇到了一些问题。 我想在不进行任何操作或优化的情况下将 XML 文件转换为字符串。
那是我的 Java 代码:
SAXBuilder builder = new SAXBuilder();
File xmlFile = f;
try
{
Document document = (Document) builder.build(xmlFile);
xml = new XMLOutputter().outputString(document);
} catch (Exception e) {
System.out.println(e.getMessage());
}
return xml;
但是当我将我的字符串与原始 XML 文件进行比较时,我发现了一些变化。
原文:
<?xml version="1.0" encoding="windows-1252"?>
<xmi:XMI xmi:version="2.1" xmlns:uml="http://schema.omg.org/spec/UML/2.0" xmlns:xmi="http://schema.omg.org/spec/XMI/2.1" xmlns:thecustomprofile="http://www.sparxsystems.com/profiles/thecustomprofile/1.0" xmlns:SoaML="http://www.sparxsystems.com/profiles/SoaML/1.0">
和字符串:
<?xml version="1.0" encoding="UTF-8"?>
<xmi:XMI xmlns:xmi="http://schema.omg.org/spec/XMI/2.1" xmlns:SoaML="http://www.sparxsystems.com/profiles/SoaML/1.0" xmlns:thecustomprofile="http://www.sparxsystems.com/profiles/thecustomprofile/1.0" xmlns:uml="http://schema.omg.org/spec/UML/2.0" xmi:version="2.1">
所有变音符号 (ä, ö , ü) 也都改变了。我会得到类似的东西:“�”而不是“ä”。
有什么办法可以阻止这种行为吗?
看看这是否适合你。
//filename is filepath string
BufferedReader br = new BufferedReader(new FileReader(new File(filename)));
String line;
StringBuilder sb = new StringBuilder();
while((line=br.readLine())!= null){
sb.append(line.trim());
}
试试这个:
String xmlToString=FileUtils.readFileToString(new File("/file/path/file.xml"));
为此你需要 Commons-io jar。
首先,正如其他人所说,您不应使用任何 XML 处理。只需将文件作为文本文件阅读即可。
其次,您的元音变音字符显示为“�”是由于使用了不正确的字符集(编码)。字符集错误可能在您的代码中,也可能是 XML 文件。
原始 XML 文件包含 encoding="windows-1252"
,但 XML 以 UTF-8 以外的任何方式编码是不寻常的,因此我怀疑该文件确实是 UTF- 8 文件及其声称使用的编码不正确。
尝试在读取文件时强制使用 UTF-8。无论如何,在将字节转换为文本时指定字符集是一个好习惯:
String xml = new String(
Files.readAllBytes(xmlFile.toPath()), StandardCharsets.UTF_8);