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


Print attributes of parent node if Item is found

如果找到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>

当您在xpath和foreach循环中检查搜索短语时,您可以将其从其中一个地方删除—如果您认为这是错误的操作—我认为它确实是错误的。

您做错的另一件事是将元素的属性联合起来,如果您想要一个不同且不复杂的xpath处理结果,那么这就没有意义了。所以我想说您这样做是错误的,您也许应该在这里执行多个xpath查询(很可能,您应该这样做)。

还有什么不对劲的?那么你的代码缩进肯定是做错了。如果你的代码真的写得那么难看,那么你肯定会犯很多错误,因为你的代码只是不必要地难以阅读和破译。

这是非常错误的,因为代码很难理解我可能会给你错误的代码错误的地方,所以这样做肯定是错误的

那么实际上不检查xpath是否返回属性。所以你的问题真的错了。你应该在询问之前检查

接下来-再次你的问题真的错了是你不寻找错误消息的点。如果您这样做了,那么您就已经知道代码出了什么问题。我将根据包含有关如何获得更好的错误消息的信息的副本关闭它。