私は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>