php解析XML格式的数据

问题描述:

我想解析一个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的对象的代码。 –

如果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似乎不工作。这是因为它缺少开始的 tonyarash

尝试使用此:

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

这似乎也不起作用。它没有返回任何值。我认为无论是符号还是其他东西都在搞乱xml格式的字符串。 – tonyarash

在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"