0

私は今のところXMLを解析する必要があります.SAXパーサーを使用しましたが、表示、編集、最終的にXMLを作成する必要があります.SAXパーサーにはその機能がないため、SAXパーサーでそれを行う方法が問題です. 私は厳しい状況にあり、dom4j と DOM についても検索しました。私のコードを以下に示します。

public class XmlBack extends DefaultHandler {

    public void startElement(String uri, String localName, String qName,
            Attributes attributes) throws SAXException {        
        if (qName.equalsIgnoreCase("VarGroup")) {
            varGroupVariables = new HashMap<String, List<VarGroupVariable>>();
        }else if (qName.equalsIgnoreCase("Variable")) {
            varGroupVariable = new VarGroupVariable();
            nameAttribute = attributes.getValue("Name");
            varGroupVariable.setName(nameAttribute);
        }else if (qName.equalsIgnoreCase("TYP")) {
            btype = true;
        }else if (qName.equalsIgnoreCase("VALUE")) {
            bvalue = true;
        }       
    }
    public void characters(char ch[], int start, int length)
            throws SAXException {
        String vtype = null;

        if (btype) {
            vtype = new String(ch, start, length);
            varGroupVariable.setType(vtype);
            btype = false;
        }

        Double value = null;
        if (bvalue) {
            String vvalue = new String(ch, start, length);
            try {
                value = Double.valueOf(vvalue);
            } catch (NumberFormatException ne) {
                value = 0d;
            }
            varGroupVariable.setValue(value);
            bvalue = false;
        }
    }

    @Override
    public void endElement(String uri, String localName, String qName)
            throws SAXException {
        if (qName.equalsIgnoreCase("Variable")) {
            String varGroupVariableName = varGroupVariable.getName().split("\\.")[0];
            String name = varGroupVariableName.substring(0,varGroupVariableName.length() - 1);
            String name1= varGroupVariableName = varGroupVariable.getName().split("\\.")[1];
            System.out.println(name1);
            List<VarGroupVariable> varGroupVariablesList;
            if(varGroupVariables.containsKey(name)) {
                varGroupVariablesList = varGroupVariables.get(name);                 
            }else {
                varGroupVariablesList = new ArrayList<VarGroupVariable>();
            }
            int serial = varGroupVariablesList.size();
            varGroupVariable.setSerial(++serial);
            varGroupVariablesList.add(varGroupVariable);        
            varGroupVariables.put(name, varGroupVariablesList);
            //System.out.println(name+"\n");
            }
    }
    private int no = 1;
    boolean bcore,bmold,bvalue,btype = false;
    String nameAttribute;
    Map<String, List<VarGroupVariable>> varGroupVariables;
    VarGroupVariable varGroupVariable;
}
4

1 に答える 1

1

XML が不当に複雑でない限り、または使用可能なスキーマがある場合を除き、最も簡単なオプションはおそらく JAXB です。この など、いくつかのチュートリアルがあり ます。もちろん、StackOverflow も JAXB の知識の良い情報源です。

于 2013-08-09T13:43:17.727 に答える