在获得 <Field name="Content"> </Field>里的内容的时候,为什么仅仅获得前两行的内容
如下内容, 但却只能得到:突然间熄了生命的危险 还来不及完成春天的心愿这两句
<Field name="Content"> 
突然间熄了生命的危险
还来不及完成春天的心愿
突然间牵挂在聚散之间
这有爱的乐章告慰着思念
别害怕我就站在你身边
心在一起爱会让我们勇敢
别害怕我就站在你身边
看黑夜无法吞没黎明的天
我坚定地不让泪水涌上双眼
付出一切只为生命的宣言
我微笑着矗立在生死之间
爱的火焰燃烧心中直到永远
别害怕我就站在你身边
心在一起爱会让我们勇敢
别害怕我就站在你身边
看黑夜无法吞没黎明的天
我坚定地不让泪水涌上双眼
付出一切只为生命的宣言
我微笑着矗立在生死之间
爱的火焰燃烧心中直到永远
我坚定地不让泪水涌上双眼
付出一切只为生命的宣言
我微笑着矗立在生死之间
爱的火焰燃烧心中直到永远我坚定地不让泪水涌上双眼
付出一切只为生命的宣言
我微笑着矗立在生死之间
爱的火焰燃烧心中直到永远
我坚定地不让泪水涌上双眼
</Field>一下是解析用的代码:class SAXHandler //article factory
extends DefaultHandler 
{
private String currentElement = null; public String Url;
public String Title;
public String Content;
public String Time;

public void characters (char[] ch, int start, int length) 
throws SAXException 
{
if (currentElement != null)
  {
if (currentElement.equalsIgnoreCase("sUrl"))
{
Url = new String(ch, start, length);
currentElement = null;
}
else if (currentElement.equalsIgnoreCase("Title"))
{
Title = new String(ch, start, length);
currentElement = null;
}
else if (currentElement.equalsIgnoreCase("Content"))
{                                   //在读这一个属性的时候,仅能读到前两行内容.
Content = new String(ch, start, length);
currentElement = null;
System.out.println (Content);
}
else if (currentElement.equalsIgnoreCase("PubTime"))
{
Time = new String(ch, start, length);
currentElement = null;
}
else
{
currentElement = null;
}
  }
} public void startElement (String uri, String localName, String gName, Attributes attr)
throws SAXException
{
if (gName.equalsIgnoreCase ("Field"))
{
  String value = attr.getValue ("name");
  if (value.equalsIgnoreCase ("sUrl"))
  {
    currentElement = "sUrl";
  }
  else if (value.equalsIgnoreCase ("Title"))
  {
currentElement = "Title";
  }
  else if (value.equalsIgnoreCase ("Content"))
  {
currentElement = "Content";
  }
  else if (value.equalsIgnoreCase ("PubTime"))
  {
currentElement = "PubTime";
  }
}
}   public void endElement(String uri, String localName, String gName) 
   throws SAXException 
  {
  
  }
  

解决方案 »

  1.   

     else if (currentElement.equalsIgnoreCase("Content"))
            {                                   //在读这一个属性的时候,仅能读到前两行内容.
                Content = new String(ch, start, length);
                currentElement = null;
                System.out.println (Content);
            }注意:currentElement = null;这行处问题了。一次不一定能将所有数据读入的,你都不知道读完没读完就将状态改变,自然会出错。
      

  2.   

    你用这个简单点的试试,应该能行import javax.xml.parsers.*;
    import org.xml.sax.helpers.*; 
    import org.xml.sax.Attributes;
    import org.xml.sax.SAXException;
    import java.io.File;public class SAXReader extends DefaultHandler
    {
    public void startDocument()
    {
    System.out.println("开始解析文档");
    }

    public void startElement(String uri, String localName, String qName,
    Attributes attributes)
     {
      System.out.println("开始解析元素" + qName);
     }
     
    public void endElement(String uri, String localName, String qName)
    throws SAXException
    {
    System.out.println("解析元素" + qName + "结束");
    }

    public void characters(char[] ch, int start, int length)
    {
    String value = new String(ch, start, length);
    //if(value.length() > 1)
    System.out.println(value);
    }

    public static void main(String[] args)throws Exception
    {
    SAXParserFactory factory = SAXParserFactory.newInstance();
    SAXParser parser = factory.newSAXParser();
    parser.parse(new File("tt.xml"), new SAXReader()); 
    }
    }
      

  3.   

    真的万分感谢 楼上两位
    原来sax方式 不一定一次全读完啊!!!
      

  4.   

    characters是可能会分开多次调用的
    你应该在startElement/endElement的时候才可以认为这个文本已经结束了