2014-12-04 118 views
1

我试图多次获取FL标签,但是当我尝试内部节点列表时,它只能获取第一个项目。更多信息请参阅我的输出。这是XML数据,我从Web服务无法使用XML解析从XML获取内部节点列表数据

<response uri="/ats/private/xml/JobOpenings/getRecords"> 
    <result> 
     <JobOpenings> 
      <row no="1"> 
       <FL val="JOBOPENINGID"> 
        <![CDATA[ 100 ]]> 
       </FL> 
       <FL val="Published in website"> 
        <![CDATA[ true ]]> 
       </FL> 
       <FL val="Modified by"> 
        <![CDATA[ Admmin ]]> 
       </FL> 
       <FL val="Modified time"> 
        <![CDATA[ Yesterday ]]> 
       </FL> 
      </row> 
      <row no="2"> 
       <FL val="JOBOPENINGID"> 
        <![CDATA[ 101 ]]> 
       </FL> 
       <FL val="Published in website"> 
        <![CDATA[ true ]]> 
       </FL> 
       <FL val="Modified by"> 
        <![CDATA[ Admin ]]> 
       </FL> 
       <FL val="Modified time"> 
        <![CDATA[ 2 Days Ago ]]> 
       </FL> 
      </row> 
      <row no="3"> 
       <FL val="JOBOPENINGID"> 
        <![CDATA[ 102 ]]> 
       </FL> 
       <FL val="Published in website"> 
        <![CDATA[ true ]]> 
       </FL> 
       <FL val="Modified by"> 
        <![CDATA[ Admin ]]> 
       </FL> 
       <FL val="Modified time"> 
        <![CDATA[ 2 Days Ago ]]> 
       </FL> 
      </row> 
     <JobOpenings> 
    <result> 
</response> 

得到这也是我在我的活动

public class AndroidXMLParsingActivity extends ListActivity { 


    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     XMLParser parser = new XMLParser(); 
     String xml = parser.getXmlFromUrl(AppConfig.URL); // getting XML 
     Document doc = parser.getDomElement(xml); // getting DOM element 

     NodeList nodeList = doc.getElementsByTagName("row"); 

     for (int i = 0; i < nodeList.getLength(); i++) { 

      Node node = nodeList.item(i); 

      Element playlistElement = (Element) node; 

      NodeList title = playlistElement.getElementsByTagName("FL"); 

      for (int kl = 0; kl < title.getLength(); kl++) { 

       if (title.item(0).getChildNodes().item(0) != null) { 

        Element nameElement = (Element) title.item(0); 
        title = nameElement.getChildNodes(); 
        Log.v("name===>", ((Node) title.item(0)).getNodeValue()); 

       } 
      } 

     } 

    } 
} 

这里使用的代码是输出:

12-04 15:56:08.694: V/name===>(3918): JOBOPENINGID 100 
12-04 15:56:08.694: V/name===>(3918): JOBOPENINGID 101 
12-04 15:56:08.704: V/name===>(3918): JOBOPENINGID 102 
12-04 15:56:08.704: V/name===>(3918): JOBOPENINGID 103 
12-04 15:56:08.704: V/name===>(3918): JOBOPENINGID 107 
12-04 15:56:08.704: V/name===>(3918): JOBOPENINGID 108 
12-04 15:56:08.704: V/name===>(3918): JOBOPENINGID 118 
12-04 15:56:08.704: V/name===>(3918): JOBOPENINGID 200 

请帮助我。 ...........

回答

1

为什么不使用XmlPullParser来解析XML?我从来没有使用过你的版本,但在我看来,XmlPullParser会更好地工作,因为你告诉它专注于START_TAG(例如),然后在你的例子中写下你想要找到的标签的名字(FL)。

XPP要做的是,他会读完整个XML文档并搜索给定START_TAG。一旦找到,你可以在switch的情况下做任何你想做的事情。

+0

谢谢!现在,我能够从使用XmlPullParser获取数据,但依然没能取FL标记值 <![CDATA [昨日]]> 现在我有只能够获取“昨天”,但我还需要“修改时间”的值。 – 2014-12-04 12:14:20

+0

尝试获取整个TAG(START_TAG),然后在其上做一个子字符串,因为他可能会从该TAG获取所有内容。 – 2014-12-05 12:05:23

+0

要从val =“something”获取“某物”,请使用[getAttributeValue(null,“val”)](http://developer.android.com/reference/org/xmlpull/v1/XmlPullParser.html#getAttributeValue java.lang.String,%20java.lang.String))当你在'START_TAG'和'getName()'是“FL”时。 – TWiStErRob 2014-12-07 10:52:43

0

可能是你在循环覆盖标题:

if (title.item(0).getChildNodes().item(0) != null) { 
    Log.v("name===>", ((Node) title.item(0).getChildNodes()).getNodeValue()); 
}