我试图用Java解析XML文件。
在开始解析之前,我需要在<code>
和</code>
标记之间替换(编码)一些文本。
因此我将文件的内容读入String:
File xml = new File(this.xmlFileName);
final BufferedReader reader = new BufferedReader(new FileReader(xml));
final StringBuilder contents = new StringBuilder();
while (reader.ready()) {
contents.append(reader.readLine());
}
reader.close();
final String stringContents = contents.toString();
将XML重写为字符串后,我使用Pattern
和Matcher
对值进行编码:
StringBuffer sb = new StringBuffer();
Pattern p = Pattern.compile("<code>(.*?)</code>", Pattern.DOTALL);
Matcher m = p.matcher(stringContents);
while (m.find()) {
//Encode text between <code> and </code> tags
String valueFromTags = m.group(1);
byte[] decodedBytes = valueFromTags.getBytes();
new Base64();
String encodedBytes = Base64.encodeBase64String(decodedBytes);
m.appendReplacement(sb, "<code>" + encodedBytes + "</code>");
}
m.appendTail(sb);
String result = sb.toString();
替换完成后,我尝试将此String
读入XML解析器:
DocumentBuilderFactory dbFactory = DocumentBuilderFactory
.newInstance();
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
Document doc = dBuilder.parse(result);
doc.getDocumentElement().normalize();
但后来我收到了这个错误:java.net.MalformedURLException: no protocol: <root> <application> <interface>...
正如您所看到的,在我将File
读入String
后,由于某些原因,添加了大量空格,原始文件中有换行符或制表符。所以我认为这就是我收到此错误的原因。有什么方法可以解决这个问题吗?
答案 0 :(得分:0)
我认为你仍然需要检查readLine是否没有返回null。
while ((line = reader.readLine()) != null) {
contents.append(line)
}