Java SAX解析-获取文本节点的有效方法
给定这个XML片段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 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 ?
}
}