Всем привет!
Есть программа:
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
public class xml {
public static void main(String args[]) {
if (args.length != 1) {
System.err.println("Usage: java NameLister xmlfile.xml");
System.exit(-1);
}
try {
SAXParserFactory factory = SAXParserFactory.newInstance();
SAXParser saxParser = factory.newSAXParser();
DefaultHandler handler = new DefaultHandler() {
public void startDocument() throws SAXException
{
System.out.println("----------------------- Start of the document ----------------------------");
}
public void startElement(String uri, String localName, String qName, Attributes attrs) throws SAXException
{
System.out.println("Element q-name: [" + qName + "] started.");
int attrCnt = attrs.getLength();
for (int i=0; i < attrCnt; i++)
{
System.out.println( "Attribute [" + attrs.getLocalName(i) + "] "
+ "Type [" + attrs.getType(i) + "]"
+ "Value [" + attrs.getValue(i) + "]"
);
}
}
public void characters(char[] chars, int start, int length) throws SAXException
{
String value = new String(chars);
System.out.println("Element value: [" + value.substring(start, start + length) + "]");
}
public void endDocument() throws SAXException
{
System.out.println("----------------------- End of the document ----------------------------");
}
public void endElement(String uri, String localName, String qName) throws SAXException
{
System.out.println("Element q-name: [" + qName + "] stopped.");
}
};
saxParser.parse(args[0], handler);
} catch (Exception e) {
e.printStackTrace();
}
}
}
Есть хml-файл, который надо распарсить:
<?xml version="1.0" ?>
<PHONEBOOK>
<PERSON>
<NAME>Green</NAME>
<EMAIL>green@yourserver.com</EMAIL>
<TELEPHONE>9001-999-201</TELEPHONE>
<WEB>www.java.com</WEB>
</PERSON>
</PHONEBOOK>
Прога работает — парсит, вроде все Ок:
----------------------- Start of the document ----------------------------
Element q-name: [PHONEBOOK] started.
Element value: [
]
Element q-name: [PERSON] started.
Element value: [
]
Element q-name: [NAME] started.
Element value: [Green]
Element q-name: [NAME] stopped.
Element value: [
]
Element q-name: [EMAIL] started.
Element value: [green@yourserver.com]
Element q-name: [EMAIL] stopped.
Element value: [
]
Element q-name: [PERSON] stopped.
Element value: [
]
Element q-name: [PHONEBOOK] stopped.
----------------------- End of the document ----------------------------
Но, нормально-ли то, что на определенных итерациях возвращается в качестве значения элемента идет символ новой строки (13)... ?
Ну я понимаю для элементов <PHONEBOOK> и <PERSON> (при их встрече вызывается метод СтартЭлемент, далее Characters и пошло...),
НО откуда береться значение после элемента <NAME> перед элемнтом <EMAIL> (см.ниже)?
Element q-name: [NAME] started.
Element value: [Green]
Element q-name: [NAME] stopped.
Element value: [
]
Element q-name: [EMAIL] started.
В принципе так мне при парсинге необходимо выдирать значения только для определенных элементов — может меня это и не коснется, но мне хотелось-бы понять причину подобной ситуации..
Заранее спасибо.
Ну и извините за столь громоздкий вопросец...