Php 使用包含连字符和字符串的属性的xpath检索XML值

Php 使用包含连字符和字符串的属性的xpath检索XML值,php,xml,xpath,Php,Xml,Xpath,我正在尝试阅读一个七天预测,它包含多达七个元素,称为。每个都有三个名为的元素,它们具有类型属性,我想检索包含句子的元素。XML文件可在以下位置获得: 基本XPath最终是 product/forecast/area[1]/forecast-period[@start-time-local="2018-04-24"]/text[@type="forecast"] 我希望有一个PHP函数来解析日期并返回此元素的文本内容,但是我很难解析变量$strDate和属性中的连字符 <?php $xm

我正在尝试阅读一个七天预测,它包含多达七个元素,称为
。每个
都有三个名为
的元素,它们具有
类型
属性,我想检索包含句子的
元素。XML文件可在以下位置获得:

基本XPath最终是

product/forecast/area[1]/forecast-period[@start-time-local="2018-04-24"]/text[@type="forecast"]
我希望有一个PHP函数来解析日期并返回此元素的文本内容,但是我很难解析变量
$strDate
和属性中的连字符

<?php 
$xml = file_get_contents('ftp://ftp.bom.gov.au/anon/gen/fwo/IDV10705.xml');
$strDate = '2017-04-30T05:00:00+10:00';
echo getPrecisForDate($xml,$strDate); 

function getPrecisForDate($xml,$strDate) {
  $precis = @$xml->forecast->area[1]->{'forecast-period'}[@start-time-local=$strDate]->text[@type="forecast"];
  return $precis;
}
forecast->area[1]->{'forecast-period'}[@start time local=$strDate]->text[@type=“forecast”];
返回$precis;
}

请您帮助我使用语法检索文本内容,而不使用循环和变量作为日期。

您正在向函数传递字符串,然后希望能够将其视为某种神奇的对象/数组/东西。这是行不通的。第一步是去做。然后,您需要在文档上运行,以找到所需的元素

您使用的XPath查询不会工作,因为
start time local
属性是一个完整的日期/时间字符串,并且您只查找一个日期。我把它改成了使用

loadXML($xml);
$xpath=newdomxpath($dom);
$xpq=“/product/forecast/area[2]/forecast period[以(@start time local,$date')]开始]/text[@type='forecast']”;
$nodes=$xpath->query($xpq);
echo$nodes[0]->textContent;
输出:

部分多云。上午晚些时候和下午发生阵雨的几率很小(30%)。晚上风速由南至西南20至25公里/小时,转为西风15至20公里/小时。

您链接到的XML在
区域[1]
中没有这样的文本元素,因此我使用了
区域[2]
。如果你在寻找一个特定的区域,你应该通过检查
区域[@aac='whatever']
来完成,而不是依赖于位置。

你可以发布关于示例xml的信息吗?你正在向函数传递一个字符串,然后不知何故希望能够将其视为某种神奇的对象/数组/东西。这不会很好地工作(它仍然不是有效的PHP代码。)谢谢Mike。我感谢您花时间和精力详细介绍这一切,您在[2]而不是[1]方面的看法是正确的。不用担心,没有这些细节,答案是没有帮助的!请务必使用
aac
属性值来获取您要查找的元素,但您永远不知道数据格式何时会更改。