Java SAX解析-获取文本节点的有效方法

Java SAX解析-获取文本节点的有效方法,java,xml,sax,Java,Xml,Sax,给定这个XML片段 <?xml version="1.0"?> <catalog> <book id="bk101"> <author>Gambardella, Matthew</author> 但是要获取文本节点的值,例如标记的值,这是相当困难的 private StringBuffer curCharValue = new StringBuffer(1024); @Override public void st

给定这个XML片段

<?xml version="1.0"?>
<catalog>
   <book id="bk101">
      <author>Gambardella, Matthew</author>
但是要获取文本节点的值,例如
标记的值,这是相当困难的

private StringBuffer curCharValue = new StringBuffer(1024);

@Override
public void startElement (String uri, String localName,
              String qName, Attributes attributes) throws SAXException {
    if(qName.equals("author")){
        curCharValue.clear();
    }
}

@Override
public void characters (char ch[], int start, int length) throws SAXException
{
     //already synchronized
    curCharValue.append(char, start, length);
}

@Override
public void endElement (String uri, String localName, String qName)
throws SAXException
{
    if(qName.equals("author")){
        String author = curCharValue.toString();
    }
}
  • 我不确定上面的示例是否有效,您认为这种方法如何
  • 有更好的办法吗?(获取文本节点的值)

  • 这是使用SAX的常用方法

    请注意,
    characters()
    可能会对每个标记调用多次。有关更多信息,请参见此。这是一份完整的报告


    否则你可以试试看

    我认为这是最有效的。。。
    private StringBuffer curCharValue = new StringBuffer(1024);
    
    @Override
    public void startElement (String uri, String localName,
                  String qName, Attributes attributes) throws SAXException {
        if(qName.equals("author")){
            curCharValue.clear();
        }
    }
    
    @Override
    public void characters (char ch[], int start, int length) throws SAXException
    {
         //already synchronized
        curCharValue.append(char, start, length);
    }
    
    @Override
    public void endElement (String uri, String localName, String qName)
    throws SAXException
    {
        if(qName.equals("author")){
            String author = curCharValue.toString();
        }
    }
    
    public void startElement(String strNamespaceURI, String strLocalName,
          String strQName, Attributes al) throws SAXException {
           if(strLocalName.equalsIgnoreCase("HIT"))
           {
                String output1 = al.getValue("NAME");
              //this will work but how can we parse if NAME="abc" only     ?
           }
    
       }