如果找到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>
答案 0 :(得分:0)
当您在xpath和foreach循环中检查搜索短语时,您可以从其中一个位置删除它 - 如果它在您的眼中是错误的 - 我会说它确实存在。 / p>
你做错的另一件事是你将属性与元素结合起来,如果你想要一个独特的,非复杂的处理xpath结果的话,这是没有意义的。所以我说你做错了,你或许应该在这里做多个xpath查询(很可能,你应该这样做)。
那么还有什么其他错误?然后缩进你的代码肯定是错误的。如果你真的编写了非爱的代码,那肯定是你犯了很多错误,因为你的代码只是不必要的难以阅读和decypher。
所以这真的是错的,因为代码很难遵循,我可能会错误地告诉你错误代码错误,所以肯定这样做是错误的。
然后你实际上不检查xpath是否返回属性。因此 您的问题确实存在错误 。您应该在询问之前检查。
除此之外 - 再次 您的问题确实出错了 是您不会查找错误消息的重点。如果您已经这样做了,那么您已经知道代码有什么问题了。我将针对包含有关如何获得更好的错误消息的信息的副本关闭它。