2013-03-21 113 views
0

我試圖從URL中提取XML數據。它不是一個XML文件,而是一個基於請求字符串的響應。simplexml_load_string無法從url加載xml

$url = "http://eligibility.sc.egov.usda.gov/eligibility/eligibilityservice?eligibilityType=Property&requestString=<?xml version='1.0'?><Eligibility xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xsi:noNamespaceSchemaLocation='/var/lib/tomcat5/webapps/eligibility/Eligibilitywsdl.xsd'><PropertyRequest StreetAddress1='".$street."' StreetAddress2='' StreetAddress3='' City='".$city."' State='".$state."' County='' Zip='".$zip."' Program='RBS'></PropertyRequest></Eligibility>"; 
$xml = simplexml_load_string($url); // requires allow_url_fopen to be on 
$elg = (string)$xml->Property[Eligibility]; 

var_dump($xml); 

我想要的數據是這樣的:

<Eligibility> 
    <Adjusted AnnualIncome="" TotalDeduction="" AdjustedIncome="" ElderlyDeduction="" YoungDeduction=""> 
    </Adjusted> 
    <Section502Guaranted MaximumAdjusted="" Eligible=""> 
    </Section502Guaranted> 
    <Section502Direct MaximumAdjusted="" Eligible=""> 
    </Section502Direct> 
    <Property Eligibility="UnableToVerifyAddress" MapURL="http://rdgdwe.sc.egov.usda.gov/eligibilitymaps/index.jsp?app=RBSIELG&ADDRESS=392 Spruce east alton&STATE=IL&ZIP=62024"/> 
    <ErrorResponse EngineId="" HostName="" MaxSeverity="" LogFile="" Class="" Module="" Severity="" Time=""> 
     <Message Code="" Type="" Text=""/> 
    </ErrorResponse> 
</Eligibility> 

我正在找回看起來是這樣的:

bool(false) bool(false) bool(false) bool(false) bool(false) bool(false) bool(false) bool(false) bool(false) bool(false) 

我沒有線索,爲什麼它這樣做。沒有錯誤發佈。

+2

'simplexml_load_string'在失敗時返回false - 它無法訪問您嘗試加載的url。 – andrewsi 2013-03-21 21:35:02

回答

0

試試這個:

$url = "http://eligibility.sc.egov.usda.gov/eligibility/eligibilityservice?eligibilityType=Property&requestString=<?xml version='1.0'?><Eligibility xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xsi:noNamespaceSchemaLocation='/var/lib/tomcat5/webapps/eligibility/Eligibilitywsdl.xsd'><PropertyRequest StreetAddress1='".$street."' StreetAddress2='' StreetAddress3='' City='".$city."' State='".$state."' County='' Zip='".$zip."' Program='RBS'></PropertyRequest></Eligibility>"; 
$url_arr = explode('requestString=', $url); 
$xml = simplexml_load_string($url_arr[ 1 ]); // requires allow_url_fopen to be on 
$elg = (string)$xml->Property[Eligibility]; 

var_dump($xml); 

基本上,我只是爆炸你給$網址n以便格式良好的xml將被隔離在$ url_arr [1]

+0

這看起來不太可能對OP有用 - http://eligibility.sc.egov.usda.gov/eligibility/eligibilityservice是一個xml響應 – AD7six 2013-03-21 21:42:45

+0

爲什麼?有用。在它顯示bool(false)並拋出警告之前,在它工作並顯示var_dump輸出之前。 – 2013-03-21 21:44:12

+0

因爲requestString是一個參數,他傳遞給該URL。您不在查詢的網址。這是一個可能有一個意外前綴到所需的XML字符串的url - 但似乎不太可能,尤其是因爲變量名爲'$ url'而不是'$ xmlString'或類似的 – AD7six 2013-03-21 21:44:52

2

simplexml_load_string()需要格式正確的XML字符串,而不是URL。你可能會想嘗試simplexml_load_file()

0

你需要從$刪除網址如下:

http://eligibility.sc.egov.usda.gov/eligibility/eligibilityservice?eligibilityType=Property&requestString= 

因爲simplexml_load_string功能需要一個良好的XML字符串,以及起始標記之前有一個URL

+0

...那麼我如何告訴腳本從哪裏加載XML?該URL是生成返回XML響應的東西。 – Plummer 2013-03-21 22:20:34

+0

我誤解了你的問題。 嘗試在瀏覽器中輸入您在$ url變量中的完整URL(然後查看頁面源代碼),以便您可以查看該URL實際上是否返回有效的內容(例如您需要提供simplexml_load_string的有效XML代碼( )或simplexml_load_file()函數) – 2013-03-21 22:56:18

+0

我知道它。 – Plummer 2013-03-22 02:01:11