Java使用sax解析xml文件。无法获得正确的内容时,出现&
问题描述:
萨克斯解析XML文件有一些问题。这里有 Java使用sax解析xml文件。无法获得正确的内容时,出现&
的Java代码这样的代码
的某些部分:boolean rcontent = false;
@Override
public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
if (qName.equalsIgnoreCase("content")) {
rcontent = true;
}
}
@Override
public void characters(char ch[], int start, int length) throws SAXException {
if (rcontent){
System.out.println("content: " + new String(ch, start, length));
rcontent = false;
}
}
但输出是:
我想说
这是不完整的。
答
对于单个<content>
块,可能会多次调用characters(...)
。尝试像
StringBuilder builder;
@Override
public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
if (qName.equalsIgnoreCase("content")) {
builder = new StringBuilder();
}
}
@Override
public void characters(char ch[], int start, int length) throws SAXException {
if (builder != null){
builder.append(new String(ch, start, length));
}
}
@Override
public void endElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
if (builder != null) {
System.out.println("Content = " + builder);
builder = null;
}
}
干杯!它工作得很好!但为什么字符(...)被多次调用一个标签?这是因为它满足并且它有最大的尺寸吗? –
阅读[javadocs](https://docs.oracle.com/javase/7/docs/api/org/xml/sax/helpers/DefaultHandler.html#characters(char [],%20int,%20int))其中指出字符数据是“分块”的。通常这样做是为了避免在内存中不必要地使用大字符数组。我猜不同的萨克斯解析器可以选择不同的块来区分字符,所以你不应该依赖分块实现。 –