вот написал сакс парсер, но он не хочет заносить значения в класс.
вот кусок xml
Код:
<?xml version="1.0" encoding="UTF-8" ?>
<necklaces xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="Necklaces.xsd">
<necklace>
<stones>
<stone cost="80">
<nameStone>SAPPHIRE</nameStone>
<weight>9</weight>
<transparency>MUDDY</transparency>
</stone>
<stone cost="80">
<nameStone>AQUAMARINE</nameStone>
<weight>16</weight>
<transparency>EASY_MUDDY</transparency>
</stone>
<stone cost="80">
<nameStone>DIAMOND</nameStone>
<weight>2</weight>
<transparency>CLEAR</transparency>
</stone>
</stones>
</necklace>
</necklaces>
вот хэндл парсера
Код:
public class SAXNecklaces extends DefaultHandler {
private ArrayList<Necklace> necklaces = new ArrayList<Necklace>();
private ArrayList<Stone> stones = new ArrayList<Stone>();
private Snap snap;
private Cord cord;
private Stone currStone = null;
private Integer costStone;
private Integer costSnap;
private Integer costCord;
private String accum = "";
private String currElem;
public ArrayList<Necklace> getNecklaces() {
return necklaces;
}
@Override
public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
currElem = qName;
System.out.println(currElem);
if (currElem.equals("stone")) {
currStone = new Stone();
costStone = new Integer(attributes.getValue("cost"));
}
if (currElem.equals("snap")) {
snap = new Snap();
costSnap = new Integer(attributes.getValue("cost"));
snap.setCost(costSnap);
}
if (currElem.equals("cord")) {
cord = new Cord();
costCord = new Integer(attributes.getValue("cost"));
}
}
@Override
public void endElement(String uri, String localName, String qName) throws SAXException {
accum = "";
if (qName.equals("stone")) {
stones.add(currStone);
}
if (qName.equals("cord")) {
Necklace necklace = new Necklace(stones, snap, cord);
necklaces.add(necklace);
}
}
@Override
public void characters(char[] ch, int start, int length) throws SAXException {
accum = new String(ch, start, length).trim();
if (currElem.equals("nameStone")) {
currStone.setName(NameItem.valueOf(accum));
System.out.println(accum);
System.out.println(currStone.getName());
}
if (currElem.equals("weight")) {
//Float weight = new Float(accum);
//currStone.setWeight(weight);
//currStone.setPrice(weight * costStone);
System.out.println(accum);
}
if (currElem.equals("transparency")) {
//currStone.setTransparency(Transparency.valueOf(accum));
System.out.println(accum);
}
if (currElem.equals("nameSnap")) {
//snap.setName(NameItem.valueOf(accum));
System.out.println(accum);
}
if (currElem.equals("matterSnap")) {
//snap.setMatter(Material.valueOf(accum));
System.out.println(accum);
}
if (currElem.equals("view")) {
//snap.setView(ViewSnap.valueOf(accum));
System.out.println(accum);
}
if (currElem.equals("nameCord")) {
//cord.setName(NameItem.valueOf(accum));
System.out.println(accum);
}
if (currElem.equals("matterCord")) {
//cord.setMatter(Material.valueOf(accum));
System.out.println(accum);
}
if (currElem.equals("weaving")) {
//cord.setWeaving(Weaving.valueOf(accum));
System.out.println(accum);
}
if (currElem.equals("length")) {
//Integer length1 = new Integer(accum);
//cord.setCost(costCord * length1);
//cord.setLength(length);
System.out.println(accum);
}
}
}
проблема в том, что когда вот так все в characters закоментировано, кроме вывода, он все выводит нормально, но если я пытаююсь заполнить объект, там я откоментировал currStone.setName(NameItem.valueOf( accum)); то он выдает ошибку, что не может заполнить энам, т.к. строка accum пустая, хотя она же не пустая, печатается то она нормально.
даже препод не может помочь, как они нас учат непонятно