我必须处理大约 750 个 xml 文件才能生成融洽的关系。我可能应该使用 XSLT 或使用 XPath,但现在可能为时已晚。所以我的问题;对于前几条记录,一切正常。似乎有几个 XML 文件没有我调用的节点。我试过使用isset
and !== null
,它不起作用,只会给我同样的错误。即
注意:尝试在第 38 行的 /var/www/overzicht/script.php 中
获取非对象的属性 注意:尝试在第 38 行的 /var/www/overzicht/script.php 中获取非对象的属性
致命错误: 在第 38 行的 /var/www/overzicht/script.php 中的非对象上调用成员函数 children()
使用以下可能是错误的,对吧?
if($xml_entry->children('http://www.isotc211.org/2005/gmd')->identificationInfo->MD_DataIdentification->citation->CI_Citation->title->children('http://www.isotc211.org/2005/gco'))
我试图解析的 XML 文件的一个小样本是(整个 xml 可以在这里找到:
<gmd:contact>
<gmd:CI_ResponsibleParty>
<gmd:individualName>
<gco:CharacterString>B. Boers</gco:CharacterString>
</gmd:individualName>
<gmd:organisationName>
<gco:CharacterString>Staatsbosbeheer</gco:CharacterString>
</gmd:organisationName>
<gmd:positionName>
<gco:CharacterString>Contactpersoon</gco:CharacterString>
</gmd:positionName>
</gmd:CI_ResponsibleParty>
</gmd:contact>
还有我的 PHP:
<?php
$xml_url = "http://www.nationaalgeoregister.nl/geonetwork/srv/dut/q?fast=index&from=1&to=10000&geometry=POLYGON((5.5963%2053.3162%2C5.5963%2053.5766%2C6.9612%2053.5766%2C6.9612%2053.3162%2C5.5963%2053.3162))";
$xml_single_url = "http://www.nationaalgeoregister.nl/geonetwork/srv/dut/xml.metadata.get?uuid=";
//Load the XML
$xml = simplexml_load_file($xml_url);
$xml_array = array();
//Loop through all the nodes with 'metadata' and put uuid in the array
foreach($xml->metadata as $metadata) {
$xml_array[] = $metadata->children('http://www.fao.org/geonetwork')->children()->uuid;
}
echo "<table>"
."<tr>"
."<td>Title</td>"
."<td>Owner</td>"
."<td>Purpose</td>"
."<td>Tags</td>"
."<td>Url</td>"
."<td>Url</td>"
."</tr>";
$i = 0;
//For every id in the $xml_array
foreach($xml_array as $ar)
{
//Just a limit for testing purposes
$i++;
if($i == 100)
{
break;
}
//Loads the xml file
$xml_entry = simplexml_load_file($xml_single_url .$ar);
echo "<tr>";
//Title
echo "<td>"
.$xml_entry->children('http://www.isotc211.org/2005/gmd')->identificationInfo->MD_DataIdentification->citation->CI_Citation->title->children('http://www.isotc211.org/2005/gco')->CharacterString
."</td>";
//Owner
echo "<td>"
.$xml_entry->children('http://www.isotc211.org/2005/gmd')->contact->CI_ResponsibleParty->organisationName->children('http://www.isotc211.org/2005/gco')->CharacterString
."</td>";
//Purpose
echo "<td>"
.$xml_entry->children('http://www.isotc211.org/2005/gmd')->identificationInfo->MD_DataIdentification->purpose->children('http://www.isotc211.org/2005/gco')->CharacterString
."</td>";
//Tags
//Transfer
echo "</tr>";
}
echo "</table>";
?>
我尝试自己找到解决方案,但似乎无法找到它..