2015-11-07 77 views
0

我試圖從scala.xml.XML解析來自AWIS(alexa rest apis from amazon)的xml響應,沒有任何成功。用scala解析xml

XML響應:

<?xml version="1.0"?> 
<aws:TrafficHistoryResponse xmlns:aws="http://alexa.amazonaws.com/doc/2005-10-05/"><aws:Response xmlns:aws="http://awis.amazonaws.com/doc/2005-07-11"><aws:OperationRequest><aws:RequestId>aef82596-5d7b-c72a-b97c-f31de4aedcf5</aws:RequestId></aws:OperationRequest><aws:TrafficHistoryResult><aws:Alexa> 

    <aws:TrafficHistory> 
    <aws:Range>7</aws:Range> 
    <aws:Site>yahoo.com</aws:Site> 
    <aws:Start>2015-10-30</aws:Start> 
    <aws:HistoricalData> 
     <aws:Data> 
     <aws:Date>2015-10-30</aws:Date> 
     <aws:PageViews> 
      <aws:PerMillion>10800</aws:PerMillion> 
      <aws:PerUser>7.33</aws:PerUser> 
     </aws:PageViews> 
     <aws:Rank>5</aws:Rank> 
     <aws:Reach> 
      <aws:PerMillion>130500</aws:PerMillion> 
     </aws:Reach> 
     </aws:Data> 
     <aws:Data> 
     <aws:Date>2015-10-31</aws:Date> 
     <aws:PageViews> 
      <aws:PerMillion>10790</aws:PerMillion> 
      <aws:PerUser>6.85</aws:PerUser> 
     </aws:PageViews> 
     <aws:Rank>5</aws:Rank> 
     <aws:Reach> 
      <aws:PerMillion>129100</aws:PerMillion> 
     </aws:Reach> 
     </aws:Data> 
     <aws:Data> 
     <aws:Date>2015-11-01</aws:Date> 
     <aws:PageViews> 
      <aws:PerMillion>10960</aws:PerMillion> 
      <aws:PerUser>6.84</aws:PerUser> 
     </aws:PageViews> 
     <aws:Rank>5</aws:Rank> 
     <aws:Reach> 
      <aws:PerMillion>132500</aws:PerMillion> 
     </aws:Reach> 
     </aws:Data> 
     <aws:Data> 
     <aws:Date>2015-11-02</aws:Date> 
     <aws:PageViews> 
      <aws:PerMillion>11180</aws:PerMillion> 
      <aws:PerUser>7.57</aws:PerUser> 
     </aws:PageViews> 
     <aws:Rank>5</aws:Rank> 
     <aws:Reach> 
      <aws:PerMillion>134800</aws:PerMillion> 
     </aws:Reach> 
     </aws:Data> 
     <aws:Data> 
     <aws:Date>2015-11-03</aws:Date> 
     <aws:PageViews> 
      <aws:PerMillion>11290</aws:PerMillion> 
      <aws:PerUser>7.70</aws:PerUser> 
     </aws:PageViews> 
     <aws:Rank>5</aws:Rank> 
     <aws:Reach> 
      <aws:PerMillion>133900</aws:PerMillion> 
     </aws:Reach> 
     </aws:Data> 
     <aws:Data> 
     <aws:Date>2015-11-04</aws:Date> 
     <aws:PageViews> 
      <aws:PerMillion>11310</aws:PerMillion> 
      <aws:PerUser>7.76</aws:PerUser> 
     </aws:PageViews> 
     <aws:Rank>5</aws:Rank> 
     <aws:Reach> 
      <aws:PerMillion>133400</aws:PerMillion> 
     </aws:Reach> 
     </aws:Data> 
     <aws:Data> 
     <aws:Date>2015-11-05</aws:Date> 
     <aws:PageViews> 
      <aws:PerMillion>11430</aws:PerMillion> 
      <aws:PerUser>7.74</aws:PerUser> 
     </aws:PageViews> 
     <aws:Rank>5</aws:Rank> 
     <aws:Reach> 
      <aws:PerMillion>133300</aws:PerMillion> 
     </aws:Reach> 
     </aws:Data> 
    </aws:HistoricalData> 
    </aws:TrafficHistory> 
</aws:Alexa></aws:TrafficHistoryResult><aws:ResponseStatus xmlns:aws="http://alexa.amazonaws.com/doc/2005-10-05/"><aws:StatusCode>Success</aws:StatusCode></aws:ResponseStatus></aws:Response></aws:TrafficHistoryResponse> 

的處理代碼:

val xml = XML.loadString(response.body) 
val response = xml \ "aws:Response" 
val data = xml \\ "aws:Data" 

既響應和數據返回空nodesequences。 我想這可能與命名空間有關。

任何指針如何解決這個問題將不勝感激。 TIA

回答

1

嘗試請求元素不指定名稱空間:

val response = xml \ "Response" 
val data = xml \\ "Data" 
+0

感謝。那就是訣竅 –