我目前正在尝试解析一些甜美的XML,只是意识到我不知道如何访问命名空间,我需要解析英文。
有人帮助一个兄弟x
链接到xml = https://xml.inmobalia.com/361/e55d03759a1004da29b3e364faaff2e1.xml
例如
<property>
<descriptions>
<property_desc lang="en">
</property_desc>
<property_desc lang="es">
</property_desc>
</descriptions>
</property>
PHP-这是我尝试过的
foreach ($data as $key => $val) {
$filterd[$key]['main_advert_1'] = json_encode([
"main_advert" => (isset($val['descriptions']['long_description']['en'])
and !empty($val['descriptions']['long_description']['en'])
)
? $val['descriptions']['long_description']['en'] : "N.A"]);
}
答案 0 :(得分:0)
不知道Laravel是否拥有自己的XML处理方法,但是在PHP中使用原始的DOMDocument
和DOMXPath
,提取所需项是一项简单的任务。
以下内容加载了XML数据的本地保存副本-但您可以在调用$dom->load( $url )
等中使用url代替
<?php
$file='c:/wwwroot/files/xml/e55d03759a1004da29b3e364faaff2e1.xml';
define('br','<br />');
libxml_use_internal_errors( true );
$dom=new DOMDocument;
$dom->validateOnParse=false;
$dom->recover=true;
$dom->strictErrorChecking=false;
$dom->load( $file );
libxml_clear_errors();
$xp=new DOMXPath( $dom );
$col=$xp->query('//descriptions/long_description[@lang="en"]');
if( $col->length > 0 ){
foreach( $col as $node )echo $node->tagName . ' ' .$node->nodeValue . br;
}
?>
答案 1 :(得分:0)
另一个解决方案是:
<?php
$xml = simplexml_load_file('https://xml.inmobalia.com/361/e55d03759a1004da29b3e364faaff2e1.xml')->children();
foreach ($xml->xpath('/properties/property') as $property) {
echo '<h2>'.$property->reference->__toString().'</h2>';
foreach ($property->xpath('descriptions/long_description[@lang="en"]') as $property) {
echo $property->__toString();
}
}
使用此解决方案,您还可以访问属性的其他详细信息。
答案 2 :(得分:0)
我构建了一个使用并提供XML的API,因此我知道在PHP中使用XML会带来多大的乐趣。 / s
我创建了一个特别支持Laravel将XML转换为常规PHP数组的软件包。它真的很容易使用,并且如果您愿意的话,还提供了可全局访问的帮助程序。 https://github.com/mtownsend5512/xml-to-array
它将使您可以轻松地访问名称空间信息,作为数组键mtcars[8:11] <- lapply(mtcars[8:11], factor)
。因此,例如,要获取第一个长描述语言,您可以执行以下操作:
@attributes
您将看到$xml = file_get_contents('https://xml.inmobalia.com/361/e55d03759a1004da29b3e364faaff2e1.xml');
$result = xml_to_array($xml);
dd($result['property'][0]['descriptions']['long_description']);
和@content
。您可以循环遍历转换后的XML,因为它是纯PHP数组。