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; 
    } 
} 

的Xml文件内容是这样的: enter image description here

但输出是:

我想说

这是不完整的。

对于单个<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; 
    } 
} 
+0

干杯!它工作得很好!但为什么字符(...)被多次调用一个标签?这是因为它满足并且它有最大的尺寸吗? –

+0

阅读[javadocs](https://docs.oracle.com/javase/7/docs/api/org/xml/sax/helpers/DefaultHandler.html#characters(char [],%20int,%20int))其中指出字符数据是“分块”的。通常这样做是为了避免在内存中不必要地使用大字符数组。我猜不同的萨克斯解析器可以选择不同的块来区分字符,所以你不应该依赖分块实现。 –