使用 SAXParser 解析 xml 的意外行为
unexpected behaviour parsing xml with SAXParser
我只是在读一个 xml 并写回 xml:
<p>Il <b>1888</b> (MDCCCLXXXVIII in numeri romani) è un anno bisestile del XIX secolo.</p>
结果是:
<p>Il<b>1888</b> (MDCCCLXXXVIII in numeri romani) è un anno bisestile del XIX secolo.</p>
如你所见,我丢了一个space。
有人可以向我解释原因吗,或者我该如何防止这种情况?
我的代码:
package parsing;
import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.nio.charset.StandardCharsets;
import org.jdom2.Document;
import org.jdom2.Element;
import org.jdom2.input.SAXBuilder;
import org.jdom2.output.Format;
import org.jdom2.output.XMLOutputter;
public class TextCase {
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
String text = "<p>Il <b>1888</b> (MDCCCLXXXVIII in numeri romani) è un anno bisestile del XIX secolo.</p>";
String newString = readSave(text);
System.out.println(newString);
}
public static String readSave(String text) throws Exception {
InputStream is = new ByteArrayInputStream((text).getBytes(StandardCharsets.UTF_8.name()));
SAXBuilder saxBuilder = new SAXBuilder();
Document document = saxBuilder.build(is);
Element classElement = document.getRootElement();
//processElement(classElement, months, monthIndex);
XMLOutputter outputter = new XMLOutputter(Format.getCompactFormat().setOmitDeclaration(true));
String output = outputter.outputString(classElement);
return output;
}
}
您需要使用 Format.getRawFormat()
而不是 Format.getCompactFormat()
Format.getCompactFormat()
<p>Il<b>1888</b>(MDCCCLXXXVIII in numeri romani) è un anno bisestile del XIX secolo.</p>
Format.getPrettyFormat()
<p>
Il
<b>1888</b>
(MDCCCLXXXVIII in numeri romani) è un anno bisestile del XIX secolo.
</p>
Format.getRawFormat()
<p>Il <b>1888</b> (MDCCCLXXXVIII in numeri romani) è un anno bisestile del XIX secolo.</p>
我只是在读一个 xml 并写回 xml:
<p>Il <b>1888</b> (MDCCCLXXXVIII in numeri romani) è un anno bisestile del XIX secolo.</p>
结果是:
<p>Il<b>1888</b> (MDCCCLXXXVIII in numeri romani) è un anno bisestile del XIX secolo.</p>
如你所见,我丢了一个space。
有人可以向我解释原因吗,或者我该如何防止这种情况?
我的代码:
package parsing;
import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.nio.charset.StandardCharsets;
import org.jdom2.Document;
import org.jdom2.Element;
import org.jdom2.input.SAXBuilder;
import org.jdom2.output.Format;
import org.jdom2.output.XMLOutputter;
public class TextCase {
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
String text = "<p>Il <b>1888</b> (MDCCCLXXXVIII in numeri romani) è un anno bisestile del XIX secolo.</p>";
String newString = readSave(text);
System.out.println(newString);
}
public static String readSave(String text) throws Exception {
InputStream is = new ByteArrayInputStream((text).getBytes(StandardCharsets.UTF_8.name()));
SAXBuilder saxBuilder = new SAXBuilder();
Document document = saxBuilder.build(is);
Element classElement = document.getRootElement();
//processElement(classElement, months, monthIndex);
XMLOutputter outputter = new XMLOutputter(Format.getCompactFormat().setOmitDeclaration(true));
String output = outputter.outputString(classElement);
return output;
}
}
您需要使用 Format.getRawFormat()
而不是 Format.getCompactFormat()
Format.getCompactFormat()
<p>Il<b>1888</b>(MDCCCLXXXVIII in numeri romani) è un anno bisestile del XIX secolo.</p>
Format.getPrettyFormat()
<p>
Il
<b>1888</b>
(MDCCCLXXXVIII in numeri romani) è un anno bisestile del XIX secolo.
</p>
Format.getRawFormat()
<p>Il <b>1888</b> (MDCCCLXXXVIII in numeri romani) è un anno bisestile del XIX secolo.</p>