Problems Parsing this file.
I am tring to parse sections of this file. I am not having any luck I do get the TagName, but that is it. What am I doing wrong?
Here is the xml file: <?xml version="1.0" encoding="UTF-8"?>
<TSConfig _CfgName="test" _CfgDescription="Test CLX Configuration" _ScnrVer="0.19">
<DrvInst _DrvLib="CLXBP" _DrvLibVer="0.00" _DrvName="Drv1" ModuleFamily="2" Path="p:1,s:0" RspToMs="5000">
<StructDef _StructName="TIMER" _ExtType="F83" _EleSize="40">
<StructMbr _MbrName="CTL" _MbrDaOfs="0" _BaseType="BYTE_BOOL" _ExtType="C1" _EleSize="1" _xDim="32" />
<StructMbr _MbrName="PRE" _MbrDaOfs="32" _BaseType="INT32" _ExtType="C4" _EleSize="4" />
<StructMbr _MbrName="ACC" _MbrDaOfs="36" _BaseType="INT32" _ExtType="C4" _EleSize="4" />
</StructDef>
<TagInst _TagName="Test_INT" _BaseType="INT16" _ExtType="C3" _EleSize="2" />
<TagInst _TagName="Test_DINT" _BaseType="INT32" _ExtType="C4" _EleSize="4" />
<TagInst _TagName="autoFillTag" _BaseType="INT16" _ExtType="C3" _EleSize="2" />
<TagInst _TagName="AutoFillTest_2" _BaseType="INT32" _ExtType="C4" _EleSize="4" />
<TagInst _TagName="Test_REAL" _BaseType="FLOAT32" _ExtType="CA" _EleSize="4" />
<TagInst _TagName="Test_SINT" _BaseType="INT8" _ExtType="C2" _EleSize="1" />
<TagInst _TagName="MVI_RecvMsgData" _BaseType="INT8" _ExtType="C2" _EleSize="1" _xDim="500" />
<TagInst _TagName="Timer1" _BaseType="STRUCT" _ExtType="F83" _EleSize="40" />
</DrvInst>
<DrvInst _DrvLib="CLXBP" _DrvLibVer="0.00" _DrvName="Logix5563" ModuleFamily="2" Path="p:1,s:5" RspToMs="5000">
<TagInst _TagName="dummy1" _BaseType="INT16" _ExtType="C3" _EleSize="2" />
</DrvInst>
<Trigger _TrigName="Trig1" _Type="Poll" _Period="1000" _Variable="1" _Condition="NEQ" _Reference="0">
<Action _TLName="RunEvery1000mS" />
<Action _TLName="RunEvery100mS" />
</Trigger>
<TransferList _TLName="RunEvery1000mS">
<Transfer _XferId="1" _Dest="Drv1\Test_INT" _Source="1234" />
<Transfer _XferId="2" _Dest="Drv1\Test_DINT" _Source="12345678" />
<Transfer _XferId="3" _Dest="Drv1\Test_DINT" _Source="Drv1\Test_INT" />
<Transfer _XferId="4" _Source="56" _Dest="Drv1\Test_SINT" />
</TransferList>
<Trigger _TrigName="Trig2" _Type="Poll" _Period="500" _Variable="1" _Condition="NEQ" _Reference="0">
<Action _TLName="RunEvery500mS" />
</Trigger>
<TransferList _TLName="RunEvery500mS" />
<TransferList _TLName="RunEvery5000mS" />
<TransferList _TLName="RunEvery100mS" />
<TransferList _TLName="RunEvery200mS" />
<Trigger _TrigName="Trig3" _Type="Poll" _Period="5000" _Variable="1" _Condition="NEQ" _Reference="0">
<Action _TLName="RunEvery200mS" />
</Trigger>
<DrvInst _DrvLib="CLXBP" _DrvLibVer="0.00" _DrvName="ENET" ModuleFamily="1" Path="p:1,s:2" RspToMs="5000">
<DevInst _DevName="PLC5_40E" ModuleFamily="3" Path="p:1,s:2,p:2,t:10.0.104.105" RspToMs="5000">
<TagInst _TagName="n7_0" _BaseType="INT16" RegName="N7:0" xDim="0" _EleSize="2" />
</DevInst>
</DrvInst>
</TSConfig>
Here is the Parser that I am using:
import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import javax.xml.parsers.ParserConfigurationException;
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;
publicclass SAXParserExampleextends DefaultHandler
{
List myTemplate;
private String tempVal;
//to maintain context
private Template tmpTemplate;
public SAXParserExample()
{
myTemplate =new ArrayList();
}
publicvoid runExample()
{
parseDocument();
printData();
}
privatevoid parseDocument()
{
//get a factory
SAXParserFactory spf = SAXParserFactory.newInstance();
try
{
//get a new instance of parser
SAXParser sp = spf.newSAXParser();
//parse the file and also register this class for call backs
sp.parse("XML/test.xml",this);
}
catch(SAXException se)
{
se.printStackTrace();
}
catch(ParserConfigurationException pce)
{
pce.printStackTrace();
}
catch (IOException ie)
{
ie.printStackTrace();
}
}
/**
* Iterate through the list and print
* the contents
*/
privatevoid printData()
{
System.out.println("No of Tags '" + myTemplate.size() +"'.");
Iterator it = myTemplate.iterator();
while(it.hasNext())
{
System.out.println(it.next().toString());
}
}
//Event Handlers
publicvoid startElement(String uri, String localName, String qName, Attributes attributes)throws SAXException
{
//reset
tempVal ="";
if(qName.equalsIgnoreCase("TagInst"))
{
//create a new instance of employee
tmpTemplate =new Template();
tmpTemplate.setName(attributes.getValue("_TagName"));
}
}
publicvoid characters(char[] ch,int start,int length)throws SAXException
{
tempVal =new String(ch,start,length);
}
publicvoid endElement(String uri, String localName, String qName)throws SAXException
{
if(qName.equalsIgnoreCase("TagInst"))
{
//add it to the list
myTemplate.add(tmpTemplate);
}
elseif (qName.equalsIgnoreCase("_BaseType"))
{
tmpTemplate.setBaseType(tempVal);
}
elseif (qName.equalsIgnoreCase("_ExtType"))
{
tmpTemplate.setExtType(tempVal);
}
elseif (qName.equalsIgnoreCase("_EleSize"))
{
tmpTemplate.setEleSize(tempVal);
}
}
publicstaticvoid main(String[] args)
{
SAXParserExample spe =new SAXParserExample();
spe.runExample();
}
}
and here is the Getter and Setter class that goes along with it.
publicclass Template
{
private String name;
private String baseType;
private String extType;
private String eleSize;
public Template()
{
}
public Template(String name, String baseType, String extType ,String eleSize)
{
this.name = name;
this.baseType = baseType;
this.extType = extType;
this.eleSize = eleSize;
}
public String getName()
{
return name;
}
publicvoid setName(String name)
{
this.name = name;
}
public String getBaseType()
{
return baseType;
}
publicvoid setBaseType(String baseType)
{
this.baseType = baseType;
}
public String getExtType()
{
return extType;
}
publicvoid setExtType(String extType)
{
this.extType = extType;
}
public String getEleSize()
{
return eleSize;
}
publicvoid setEleSize(String eleSize)
{
this.eleSize = eleSize;
}
public String toString()
{
StringBuffer sb =new StringBuffer();
sb.append("Tag Details - ");
sb.append("Name: " + getName());
sb.append(", ");
sb.append("Base Type: " + getBaseType());
sb.append(", ");
sb.append("Ext Type: " + getExtType());
sb.append(", ");
sb.append("Element Size: " + getEleSize());
sb.append(".");
return sb.toString();
}
}
and this is the Data that I get:
No of Tags'10'.
Tag Details - Name: Test_INT, Base Type: null, Ext Type: null, Element Size: null.
Tag Details - Name: Test_DINT, Base Type: null, Ext Type: null, Element Size: null.
Tag Details - Name: autoFillTag, Base Type: null, Ext Type: null, Element Size: null.
Tag Details - Name: AutoFillTest_2, Base Type: null, Ext Type: null, Element Size: null.
Tag Details - Name: Test_REAL, Base Type: null, Ext Type: null, Element Size: null.
Tag Details - Name: Test_SINT, Base Type: null, Ext Type: null, Element Size: null.
Tag Details - Name: MVI_RecvMsgData, Base Type: null, Ext Type: null, Element Size: null.
Tag Details - Name: Timer1, Base Type: null, Ext Type: null, Element Size: null.
Tag Details - Name: dummy1, Base Type: null, Ext Type: null, Element Size: null.
Tag Details - Name: n7_0, Base Type: null, Ext Type: null, Element Size: null.
Everything after the name is null? Plus I don't really want the last two tags. I am just trying get sections of this XML.

