0

私はxmlに取り組んでいます.saxパーサーを使用しました.指定された形式でxmlからデータを解析する必要があります.現在の問題は、nameattributeに名前がある場所です.名前の半分だけを表示する必要があります. xml から選択文字を削除するにはどうすればよいですか。私はxmlとjavaが初めてなので、これについて少し混乱しています。私のコードを以下に示します。

import java.util.ArrayList;
import java.util.List;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;

public class XmlBack extends DefaultHandler {

    public void startElement(String uri, String localName, String qName,
            Attributes attributes) throws SAXException {

        if (qName.equalsIgnoreCase("VarGroup")) {
            varGroupVariables = new ArrayList<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;
        }else if (qName.equalsIgnoreCase("Mold.sv_")) {
            bmold = true;
        }else if (qName.equalsIgnoreCase("Core1.sv_")) {
            bcore = true;
        }

    }

    public void characters(char ch[], int start, int length)
            throws SAXException {
        String vtype = null;

        if (bcore) {

            bcore = false;
        }
        if (bmold) {
            bmold = true;
        }
        if (btype) {
            vtype = new String(ch, start, length);
            varGroupVariable.setType(vtype);
            varGroupVariable.setSerial(no++);
            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")) {
            varGroupVariables.add(varGroupVariable);
        }
    }

    private int no = 1;
    boolean bcore,bmold,bvalue,btype = false;
    String nameAttribute;
    List<VarGroupVariable> varGroupVariables;
    VarGroupVariable varGroupVariable;
}

My sample xml is provided below

<?xml version="1.0" encoding="UTF-8"?>
<HMI_Data Version="1.0" MaschinenNR.="XXXXXX" Date="21-10-2009">
   <VarGroup Name="VG_MachineData">
      <Variable Name="Mold1.sv_rMoldStroke">
         <Typ>REAL</Typ>
         <Value>6.000000e+02</Value>
      </Variable>
      <Variable Name="Core1.sv_rMaxSpeedFwd"> //REMOVE core1.sv_
         <Typ>REAL</Typ>
         <Value>5.000000e+01</Value>
      </Variable>
      <Variable Name="Core1.sv_rMaxSpeedBwd">
         <Typ>REAL</Typ>
         <Value>5.000000e+01</Value>
      </Variable>
      <Variable Name="Core1.sv_rMaxPressureFwd">
         <Typ>REAL</Typ>
         <Value>1.450000e+02</Value>
      </Variable>
      <Variable Name="Core1.sv_rMaxPressureBwd">
         <Typ>REAL</Typ>
         <Value>1.450000e+02</Value>
      </Variable>
      <Variable Name="Core1.sv_rImpulseFilterLimit">
         <Typ>REAL</Typ>
         <Value>0.000000e+00</Value>
      </Variable>
      <Variable Name="Core2.sv_rMaxSpeedFwd"> //REMOVE core2.sv_
         <Typ>REAL</Typ>
         <Value>5.000000e+01</Value>
      </Variable>
      <Variable Name="Core2.sv_rMaxSpeedBwd">
         <Typ>REAL</Typ>
         <Value>5.000000e+01</Value>
      </Variable>
4

1 に答える 1