Java Android:解析XML数据:带参数的标记
我想为我的android应用解析从数据库软件导出的XML文件。 但是,有些标记具有如下参数:Java Android:解析XML数据:带参数的标记,java,android,xml,xml-parsing,xmlpullparser,Java,Android,Xml,Xml Parsing,Xmlpullparser,我想为我的android应用解析从数据库软件导出的XML文件。 但是,有些标记具有如下参数: 1 信息 信息 0 在尝试查找开始标记以对其进行解析时,我应该指定什么字符串值? (例如:为了找到行,我将开始点击与“行”进行比较,如果返回true,我计算数据。我应该为每个值做什么,即分别索引、前、后和检查?) 我的java代码如下 try{ XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
1
信息
信息
0
在尝试查找开始标记以对其进行解析时,我应该指定什么字符串值?
(例如:为了找到行,我将开始点击与“行”进行比较,如果返回true,我计算数据。我应该为每个值做什么,即分别索引、前、后和检查?)
我的java代码如下
try{
XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
factory.setNamespaceAware(true);
XmlPullParser xpp = factory.newPullParser();
InputStream stream = context.getResources().openRawResource(com.Whydea.chemistryhelper.R.raw.appxml);
xpp.setInput(stream, null);
int eventType = xpp.getEventType();
while (eventType != XmlPullParser.END_DOCUMENT){
if(eventType==XmlPullParser.START_TAG){
handleStartTag(xpp.getName()); //handels Start Tag
} else if (eventType==XmlPullParser.END_TAG){
handleEndTag(xpp.getName());
Ctag=null;
} else if (eventType==XmlPullParser.TEXT){
handleText(xpp.getText());
}
eventType=xpp.next();
}
}catch (NotFoundException e){
Log.d("XMLpp",e.getMessage());
}catch (XmlPullParserException e){
Log.d("XMLpp",e.getMessage());
}catch (IOException e){
Log.d("XMLpp",e.getMessage());
}
`
编辑:
每个“值”开始标记都有自己的属性(列=…),如何访问这些属性
例如:要访问一行,我有一个值为“row”的字符串常量,并检查start标记是否与之对应,它就可以工作了。但是当我声明一个值为“value column=\”Check\“null=\”false\”的字符串常量时(我必须使用\other wise“give errors),它找不到起始标记。那么我的常量应该是什么呢?如果我正确理解了您的问题,那么要获得您需要执行的每个值,基本上您需要获得xml标记中每个属性的值
int attributeCount = xpp.getAttributeCount();
for(int i = 0; i<attributeCount; i++){
String name = xpp.getAttributeName(i);
//Log.d(TAG, "Name: "+name);
if(name != null && name.equalsIgnoreCase("column")){
return Integer.parseInt(xpp.getAttributeValue(i));
}
}
对于xml标记“INFO”值,它将返回“INFO”您是否开发了生成xml文件的应用程序?如果是,为什么不更改它?如果xml具有以下格式,解析xml会容易得多:
<item Index="1" Front="INFO" Back="INFO" Check="0"/>
<item Index="2" Front="INFO" Back="INFO" Check="1"/>
试试看{
最终服务S=新服务();
字符串xmlString=S.ImportAllPollBoothStatus(IMEI、asscd、boothno);
if(xmlString.toLowerCase().trim().equals(“false”)){
返回false;
}
DocumentBuilderFactory docFactory=DocumentBuilderFactory
.newInstance();
DocumentBuilder docBuilder=docFactory.newDocumentBuilder();
InputSource is=新的InputSource();
is.setCharacterStream(新的StringReader(xmlString));
Document doc=docBuilder.parse(is);
NodeList节点=doc.getElementsByTagName(“HT”);
对于(int i=0;i
它们仍然有不同的属性。如何访问这些属性来识别它们?使用SAX解析器:只需覆盖startElement、endElement和character方法。在startElement中,您可以获得每个XML节点,并可以获得属性值。如何?使用attributes对象(startElement参数):您将获得“信息”在代码信息中执行此操作attributes.getValue(“Front”),我需要信息数据
<item Index="1" Front="INFO" Back="INFO" Check="0"/>
<item Index="2" Front="INFO" Back="INFO" Check="1"/>
try {
final Service S = new Service();
String xmlString = S.ImportAllPollBoothStatus(IMEI,asscd, boothno);
if(xmlString.toLowerCase().trim().equals("false")){
return false;
}
DocumentBuilderFactory docFactory = DocumentBuilderFactory
.newInstance();
DocumentBuilder docBuilder = docFactory.newDocumentBuilder();
InputSource is = new InputSource();
is.setCharacterStream(new StringReader(xmlString));
Document doc = docBuilder.parse(is);
NodeList nodes = doc.getElementsByTagName("HT");
for (int i = 0; i < nodes.getLength(); i++) {
Element element = (Element) nodes.item(i);
NodeList blockidnodes = doc.getElementsByTagName("Table");
for (int blockidcount = 0; blockidcount < blockidnodes
.getLength(); blockidcount++) {
NodeList PollpercentId = element
.getElementsByTagName("PollpercentId");
Element line1 = (Element) PollpercentId.item(blockidcount);
NodeList asscd1 = element
.getElementsByTagName("asscd");
Element line2 = (Element) asscd1.item(blockidcount);
NodeList pollgcd = element
.getElementsByTagName("pollgcd");
Element line3 = (Element) pollgcd.item(blockidcount);
NodeList SessionYearIdref = element
.getElementsByTagName("SessionYearIdref");
Element line4 = (Element) SessionYearIdref.item(blockidcount);
NodeList MaleVoters = element
.getElementsByTagName("MaleVoters");
Element line5 = (Element) MaleVoters.item(blockidcount);
NodeList FemaleVoters = element
.getElementsByTagName("FemaleVoters");
Element line6 = (Element) FemaleVoters.item(blockidcount);
NodeList UpdatedDate = element
.getElementsByTagName("UpdatedDate");
Element line7 = (Element) UpdatedDate.item(blockidcount);
NodeList timeslot = element
.getElementsByTagName("timeslot");
Element line8 = (Element) timeslot.item(blockidcount);
this.db.insertVotingStatus(
getCharacterDataFromElement(line1),
getCharacterDataFromElement(line2),
getCharacterDataFromElement(line3),
getCharacterDataFromElement(line4),
getCharacterDataFromElement(line5),
getCharacterDataFromElement(line6),
getCharacterDataFromElement(line7),
getCharacterDataFromElement(line8));
}
}
}
catch (Exception e) {
Log.e("EXCEPTION DURING VIDHANSABHA INSERION",
"======Insert-VIDHANSABHA-DETAILS=====================" + e);
return false;
}
return true;