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);
如果XML是在一个文件中使用
simplexml_load_file
如果您有它在字符串中使用
simplexml_load_string
然后你可以用下面的代码来访问它。
<?php
$yourxml = simplexml_load_file('your.xml');
echo $yourxml->search[0]->DS_Rating;
?>
这则输出
DS3
到浏览器通过在你的代码中的 '回响'。我希望这能指出你正确的方向。
Infact,因为你只有一个单一的条目在你的xml文件中,它可以使用这行代码'echo $ yourxml-> DS_Rating;'来访问。 –
ximplexml_load_string似乎不工作。这是因为它缺少开始的 tonyarash
尝试使用此:
$xml = new SimpleXMLElement('<?xml version="1.0" encoding="utf-8" ?>'.$yourXMLString);
这似乎也不起作用。它没有返回任何值。我认为无论是符号还是其他东西都在搞乱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)')
);
string(3) "DS3"
显示你正在尝试使用,使SimpleXML的对象的代码。 –