이 XML에서 자식 요소를 가져올 수 없습니다. 작업 값을 가져 오는 중이지만 해당 작업에 액세스하여 개별 작업에 사용할 수 없습니다. 내가 reaaly 도움이 필요합니다, 아래에 내가 시도한 soution, 부모 배열 작업 배열을 중첩 할 수 없습니다.중첩 된 XML 끌어 오기 구문 분석기 문제가 자식 요소를 가져올 수 없습니다.
<root>
<job>
<id>3</id>
<job_title/>
<job_description/>
<job_room>abx.jpg</job_room>
<status/>
<task>no task</task>
</job>
<job>
<id>2</id>
<job_title/>
<job_description/>
<job_room>ddemo.jpg</job_room>
<status/>
<task>
<task_id/>
<task_title/>
<task_description/>
<task_status>0</task_status>
</task>
</job>
<job>
<id>60</id>
<job_title>CTO</job_title>
<job_description>CTO</job_description>
<job_room>4564</job_room>
<status>open</status>
<task>
<task_id>1</task_id>
<task_title>Add crib</task_title>
<task_description/>
<task_status>0</task_status>
</task>
<task>
<task_id>2</task_id>
<task_title/>
<task_description/>
<task_status>0</task_status>
</task>
</job>
</root>
이것은 제가 시도한 해결책입니다.
public static List<Job> parseFeed(String content) {
try {
boolean inDataItemTag = false;
String currentTagName = "";
Job job = null;
List<Job> jobList = new ArrayList<>();
XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
XmlPullParser parser = factory.newPullParser();
parser.setInput(new StringReader(content));
int eventType = parser.getEventType();
while (eventType != XmlPullParser.END_DOCUMENT) {
switch (eventType) {
case XmlPullParser.START_TAG:
currentTagName = parser.getName();
if (currentTagName.equals("job")) {
inDataItemTag = true;
job = new Job();
jobList.add(job);
}
break;
case XmlPullParser.END_TAG:
if (parser.getName().equals("job")) {
inDataItemTag = false;
}
currentTagName = "";
break;
case XmlPullParser.TEXT:
if (inDataItemTag && job != null) {
switch (currentTagName) {
case "id":
job.setId(parser.getText());
System.out.println(job.getId());
break;
case "job_description":
job.setJob_description(parser.getText());
System.out.println(job.getJob_description());
break;
case "job_room":
job.setJob_room(parser.getText());
break;
case "job_title":
job.setJob_title(parser.getText());
System.out.println("JOB TITLE");
break;
case "status" :
job.setStatus(parser.getText());
break;
case "task" :
job.setChildren(getTask(content));
default:
break;
}
}
break;
}
eventType = parser.next();
}
return jobList;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
public static List<Task> getTask(String content) {
try {
boolean inDataItemTag = false;
String currentTagName = "";
Task task = null;
List<Task> taskList = new ArrayList<>();
XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
XmlPullParser parser = factory.newPullParser();
parser.setInput(new StringReader(content));
int eventType = parser.getEventType();
while (eventType != XmlPullParser.END_DOCUMENT) {
switch (eventType) {
case XmlPullParser.START_TAG:
currentTagName = parser.getName();
if (currentTagName.equals("task")) {
inDataItemTag = true;
task = new Task();
taskList.add(task);
}
break;
case XmlPullParser.END_TAG:
if (parser.getName().equals("task")) {
inDataItemTag = false;
}
currentTagName = "";
break;
case XmlPullParser.TEXT:
if (inDataItemTag && task != null) {
switch (currentTagName) {
case "task_id":
task.setTask_id(parser.getText());
System.out.println(task.getTask_id());
break;
case "task_description":
task.setTask_description(parser.getText());
System.out.println(task.getTask_description());
break;
case "task_title":
task.setTask_title(parser.getText());
break;
case "task_status" :
task.setTask_status(parser.getText());
break;
default:
break;
}
}
break;
}
if(currentTagName.equals("job"))
{
break;
}
eventType = parser.next();
}
return taskList;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
이
public class Job {
private String id;
private String job_title;
private String job_description;
private String job_room;
private String status;
private List<Task> children;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getJob_title() {
return job_title;
}
public void setJob_title(String job_title) {
this.job_title = job_title;
}
public String getJob_description() {
return job_description;
}
public void setJob_description(String job_description) {
this.job_description = job_description;
}
public String getJob_room() {
return job_room;
}
public void setJob_room(String job_room) {
this.job_room = job_room;
}
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
public List<Task> getChildren() {
return children;
}
public void setChildren(List<Task> children) {
this.children = children;
}
}
public class Task {
private String task_id;
private String task_title;
private String task_description;
private String task_status;
public String getTask_id() {
return task_id;
}
public void setTask_id(String task_id) {
this.task_id = task_id;
}
public String getTask_title() {
return task_title;
}
public void setTask_title(String task_title) {
this.task_title = task_title;
}
public String getTask_description() {
return task_description;
}
public void setTask_description(String task_description) {
this.task_description = task_description;
}
public String getTask_status() {
return task_status;
}
public void setTask_status(String task_status) {
this.task_status = task_status;
}
}
어떻게하면이 필자를 구현할 수 있습니까? 이 목록을 다른 활동으로 보내고 싶습니다! ? – Hiteshdua1
대답은 제공해야하는 추가 정보에 따라 달라지기 때문에 이는 매우 다른 주제입니다. [이 튜토리얼] (http://developer.android.com/reference/android/os/Parcelable.html)을 따르는 것이 가능해야합니다. 그러나 또 다른 해결책이 있습니다 : 투영법은'Serializeable'을 확장 할 수 있습니다. [여기] (https://encrypted.google.com/url?sa=t&rct=j&q=&esrc=s&source=web&cd=5&ved=0CDoQFjAE&url=http%3A%2F%2Fwww.developerphil.com%2Fparcelable-vs-serializable보기 % 2F & ei = 2Lq4VKqGHcrcPfnAgOAD & usg = AFQjCNGRpohXPz5HhXIQ3xxcMLUNGQ1tZw & sig2 = PviF-wpMrRVZ-UOqu3IWNQ & bvm = bv.83829542, d.ZWU) – Cfx