对于一个网站,我需要从外部XML文件中获取数据。 我加载这样的数据:
$doc = new DOMDocument();
$url = 'http://myurl/results/xml/12345';
if (!$doc->load($url))
{
echo json_encode(array('error'=> 'error'));
exit;
}
$xpath = new DOMXPath($doc);
$program_date = $xpath->query('//game/date');
然后我使用foreach循环来获取所有数据
if($program_date){
foreach($program_date as $node){
$programArray['program_date'][] = $node->nodeValue;
}
}
我遇到的问题是有时候某个游戏没有约会。 因此,当游戏没有约会时,我只想让它放置" - ",而不是XML文件中的日期。我的问题是,我不知道如何检查数据中是否存在日期。
我使用了很多方法,比如isset,!isset,else,!empty,empty
$teamArray['program_kind'][] = "-";
但注意到...... 有人可以帮我解决这个问题吗? 提前致谢
答案 0 :(得分:1)
您需要迭代game
元素,将它们用作上下文并使用其他XPath表达式获取数据。
但首先要做的一件事。使用DOMXPath::evaluate()
。 DOMXPath::query()
仅支持位置路径。它只能返回一个节点列表。但XPath表达式也可以返回标量值。
$xpath = new DOMXPath($doc);
$games = $xpath->evaluate('//game');
//game
的结果始终是DOMNodeList
个对象。它可以是一个空列表,但您可以直接迭代它。像if ($games)
这样的条件永远都是真的。
foreach ($games as $game) {
现在您拥有game
元素节点,您可以将其用作上下文来获取其他数据。
$date = $xpath->evaluate('string(date)', $game);
string()
将位置路径的第一个节点强制转换为字符串。如果它不匹配节点,它将返回一个空字符串。如果要同时删除空格,请选中normalize-space()
。
您可以使用game
验证date
元素是否包含count()
节点。
$hasDate = $xpath->evaluate('count(date) > 0', $game);
此XPath表达式的结果始终是布尔值。