如果找到Item,则打印父节点的属性

时间:2014-07-19 10:16:25

标签: php xml xpath

如果找到Item,我想打印父节点属性。我正在使用XPath,PHP和XML。 我的代码是

if( ! $xml = simplexml_load_file($my_feed) ) 
        { 
            echo 'unable to load XML file'; 
        } 
        else 
        { 
            $nodes = $xml->xpath("//Stock/Assortment[contains(translate(Item, 'АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЬЫЭЮЯ', 'абвгдеёжзиёклмнопрстуфхцчшщьыэюя'), '$search_phrase')]|/Stock/@City | /Stock/@CompanyName | /Stock/@Address | /Stock/@Date");
            foreach($nodes as $node)
            {
                if(strpos($node->Item,$search_phrase) !== false)
                {
                print $node->City.$node->CompanyName.$node->Address.$node->Date;
                }
                print $node->Item."\r\n".$node->Price."\r\n".$node->ValidDate."\r\n".$node->Manufacturer."\r\n"."<br/>";
            } 
        }

它不是打印父节点的属性,有什么问题? 我的xml是:

<?xml version="1.0" encoding="utf-8"?>
<Stock City="Душанбе" CompanyName="Фирик и ко" Address="Ленина 2" Date="12.06.2014 06:22:58">
  <Assortment>
    <ID>1</ID>
    <Item>3В амп.  №3 ( Витамины В1+В6+В12 )</Item>
    <Quantity>8</Quantity>
    <Price>17.0000</Price>
    <ValidDate>01.01.1999</ValidDate>
    <Summ>136.0000</Summ>
    <Manufacturer>Заглушка</Manufacturer>
    <Supplier>Заглушка</Supplier>
  </Assortment>
</Stock>

1 个答案:

答案 0 :(得分:0)

当您在xpath和foreach循环中检查搜索短语时,您可以从其中一个位置删除它 - 如果它在您的眼中是错误的 - 我会说它确实存在。 / p>

你做错的另一件事是你将属性与元素结合起来,如果你想要一个独特的,非复杂的处理xpath结果的话,这是没有意义的。所以我说你做错了,你或许应该在这里做多个xpath查询(很可能,你应该这样做)。

那么还有什么其他错误?然后缩进你的代码肯定是错误的。如果你真的编写了非爱的代码,那肯定是你犯了很多错误,因为你的代码只是不必要的难以阅读和decypher。

所以这真的是错的,因为代码很难遵循,我可能会错误地告诉你错误代码错误,所以肯定这样做是错误的。

然后你实际上不检查xpath是否返回属性。因此 您的问题确实存在错误 。您应该在询问之前检查

除此之外 - 再次 您的问题确实出错了 是您不会查找错误消息的重点。如果您已经这样做了,那么您已经知道代码有什么问题了。我将针对包含有关如何获得更好的错误消息的信息的副本关闭它。