2014-12-04 120 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()); 
}