php解析xml格式的数据

时间:2014-03-12 14:57:38

标签: php xml

我正在尝试解析我通过api调用得到的xml数据。我可以使用file_get_contents读取字符串,但simpleXML_load_string似乎无法读取它。我可以将它保存到文件然后simpleXML_load_file工作。但我宁愿不将内容写入文件。我似乎无法理解如何使用DOM或XMLParse。我是PHP新手并解析XML。来自api调用的输出数据如下。

<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);

3 个答案:

答案 0 :(得分:0)

如果XML在文件中使用

simplexml_load_file

如果你在字符串中使用

simplexml_load_string

然后您可以使用以下代码来访问它。

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

然后输出

DS3

通过“回声”浏览器进入浏览器在你的代码中。我希望这能指出你正确的方向。

答案 1 :(得分:0)

尝试使用它:

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

答案 2 :(得分: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"