Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/257.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
匹配上的PHP XML文件筛选器_Php_Xml - Fatal编程技术网

匹配上的PHP XML文件筛选器

匹配上的PHP XML文件筛选器,php,xml,Php,Xml,我在工作上花了很多时间 我要做的是按城市(本例中为市场)过滤xml文件 这是xml数据 <itemset> <item> <id>2171</id> <market>Vancouver</market> <url>http://</url></item> <item> <id>2172</id> <market>Toronto</mar

我在工作上花了很多时间

我要做的是按城市(本例中为市场)过滤xml文件

这是xml数据

<itemset>
<item>
<id>2171</id>
<market>Vancouver</market>
<url>http://</url></item>
<item>
<id>2172</id>
<market>Toronto</market>
<url>http://</url></item>
<item>
<id>2171</id>
<market>Vancouver</market>
<url>http://</url></item>

2171
温哥华
http://
2172
多伦多
http://
2171
温哥华
http://
这是我的密码

<?php
$source = 'get-xml-feed.php.xml';

$xml = new SimpleXMLElement($source);

$result = $xml->xpath('//item/[contains(market, \'Toronto\')]');

while(list( , $node) = each($result)) {
    echo '//Item/[contains(Market, \'Toronto\')]',$node,"\n";
}

?>

如果我可以实现此功能,我希望根据筛选结果访问每个元素,项目[0],项目[1]

谢谢

我建议使用。与使用特定的XML对象+XPath相比,学习曲线的步骤更少。它以您描述的格式返回一个对象

试试这个,你就会明白我的意思:

<?php
$source = 'get-xml-feed.php.xml';

$xml = simplexml_load_file($source);

var_dump($xml);
?>

如果您只是有一个XML片段,那么还有一个问题。

我建议使用。与使用特定的XML对象+XPath相比,学习曲线的步骤更少。它以您描述的格式返回一个对象

试试这个,你就会明白我的意思:

<?php
$source = 'get-xml-feed.php.xml';

$xml = simplexml_load_file($source);

var_dump($xml);
?>


如果您只需要一个XML片段,也会出现这种情况。

我认为这实现了您使用XPath寻找的内容:

<?php
$source = file_get_contents('get-xml-feed.php.xml');

$xml = new SimpleXMLElement($source);

foreach ($xml as $node)
{
    $row = simplexml_load_string($node->asXML());
    $result = $row->xpath("//item/market[.='Toronto']");
    if ($result[0])
    {
        var_dump($row);
    }
}

?>

我认为这实现了您使用XPath所寻找的:

<?php
$source = file_get_contents('get-xml-feed.php.xml');

$xml = new SimpleXMLElement($source);

foreach ($xml as $node)
{
    $row = simplexml_load_string($node->asXML());
    $result = $row->xpath("//item/market[.='Toronto']");
    if ($result[0])
    {
        var_dump($row);
    }
}

?>

我想我们可能正在尝试获取包含特定节点的父节点。为此,您将需要以下xpath表达式:“//item/market[.='Toronto']/..”我想我们可能正在尝试获取包含特定节点的父节点。为此,您需要使用以下xpath表达式:'//item/market[.='Toronto']/..'