2013-03-21 43 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