2014-03-12 139 views
0

我想解析一個XML數據,我通過api調用。我可以使用file_get_contents讀入字符串,但simpleXML_load_string似乎無法讀取它。我可以將它保存到一個文件,然後simpleXML_load_file起作用。但我寧願不將內容寫入文件。我似乎無法理解如何使用DOM或XMLParse。我是PHP新手,解析XML。下面是api調用的輸出數據。php解析XML格式的數據

<Search> 
<DS_Rating>DS3</DS_Rating> 
<Overall>17.5</Overall> 
<LargestGiftLow>0</LargestGiftLow> 
<LargestGiftHigh>0</LargestGiftHigh> 
<EstimatedCapacityRange>I - $15,000 - $24,999</EstimatedCapacityRange> 
<EstimatedCapacity>20452</EstimatedCapacity> 
<RealEstateEst>270073</RealEstateEst> 
<RealEstateCount>1</RealEstateCount> 
<LikelyMatchesCount>0</LikelyMatchesCount> 
<LikelyMatchesTotal>0</LikelyMatchesTotal> 
<FndBoard></FndBoard> 
<GSBoard></GSBoard> 
<PoliticalLikelyCount>0</PoliticalLikelyCount> 
<PoliticalLikelyTotal>0</PoliticalLikelyTotal> 
<BusinessRevenues>0</BusinessRevenues> 
<SECStockValue>0</SECStockValue> 
<SECInsider></SECInsider> 
<MarketGuide></MarketGuide> 
<IRS990PF></IRS990PF> 
<RealEstateTrust></RealEstateTrust> 
<MarketGuideComp>0</MarketGuideComp> 
<MarketGuideOptions>0</MarketGuideOptions> 
<BusinessAffiliation></BusinessAffiliation> 
<Pension></Pension> 
<PensionAssets>0</PensionAssets> 
<CorpTech></CorpTech> 
<Pilot></Pilot> 
<AirplaneOwner></AirplaneOwner> 
<Boat></Boat> 
<submit_time>2014-03-11 15:48:45</submit_time> 
</Search> 

發現問題是我在瀏覽器中看到的實際上是一個帶有html_entiity編碼的php輸出。我能夠使用下面的代碼來處理它,讓我使用simplexml加載它。

$rawxml = html_entity_decode($rawxml); 
$rawxml = str_replace(array(' ', "<pre>"), '', $rawxml); 
$rawxml = utf8_encode($rawxml); 

$xml = simplexml_load_string($rawxml); 
+0

顯示你正在嘗試使用,使SimpleXML的對象的代碼。 –

回答

0

如果XML是在一個文件中使用

simplexml_load_file 

如果您有它在字符串中使用

simplexml_load_string 

然後你可以用下面的代碼來訪問它。

<?php 
    $yourxml = simplexml_load_file('your.xml'); 
    echo $yourxml->search[0]->DS_Rating; 
?> 

這則輸出

DS3 

到瀏覽器通過在你的代碼中的 '迴響'。我希望這能指出你正確的方向。

+0

Infact,因爲你只有一個單一的條目在你的xml文件中,它可以使用這行代碼'echo $ yourxml-> DS_Rating;'來訪問。 –

+0

ximplexml_load_string似乎不工作。這是因爲它缺少開始的<<< XML標記。它返回空。 – tonyarash

0

嘗試使用此:

$xml = new SimpleXMLElement('<?xml version="1.0" encoding="utf-8" ?>'.$yourXMLString); 
+0

這似乎也不起作用。它沒有返回任何值。我認爲無論是符號還是其他東西都在搞亂xml格式的字符串。 – tonyarash

0

在DOM你XML加載到一個DOMDocument,併爲它創建一個DOMXpath實例。

$dom = new DOMDocument(); 
$dom->loadXml($xmlString); 
//$dom->load($xmlFile); 
$xpath = new DOMXpath($dom); 

DOMXpath :: evaluate()用於從DOM中獲取數據。

$rating = $dom->evaluate('string(/Search/DS_Rating)'); 

/Search/DS_rating這樣的Xpath表達式總是返回一個節點列表。您可以使用foreach()來迭代它。 Xpath中的string()函數從列表中獲取第一個節點並將其轉換爲字符串。如果列表中沒有節點,則結果爲空字符串。

$xmlString = <<<'XML' 
<Search> 
    <DS_Rating>DS3</DS_Rating> 
    <Overall>17.5</Overall> 
</Search> 
XML; 

$dom = new DOMDocument(); 
$dom->loadXml($xmlString); 
$xpath = new DOMXpath($dom); 

var_dump(
    $xpath ->evaluate('string(/Search/DS_Rating)') 
); 

輸出:https://eval.in/118921

string(3) "DS3"