我正试图找到一种方法,如何正确使用xpath来选择某些元素,我的解决方案部分工作,我不知道如何解决它。
以下是xml示例:
<Database>
<Items>
<Item>
<Name>A</Name>
<Locations>
<Location>A</Location>
<Location>B</Location>
<Location>C</Location>
</Locations>
</Item>
<Item>
<Name>B</Name>
<Locations>
<Location>E</Location>
</Locations>
</Item>
<Item>
<Name>C</Name>
<Locations>
<Location>D</Location>
<Location>E</Location>
</Locations>
</Item>
</Items>
</Database>
我正在使用这个PHP代码来获取包含位置“E”的所有项目
$LocationFilter = "E" //hard written, it's actually a GET param
$filter = $xml->xpath("//Items/Item[contains(Locations/Location,'".$LocationFilter."')]");
foreach ($filter as $Item) {
echo($filter->Name);
}
而不是获得BC(项目的名称),我只获得B,换句话说,我只获得第一个位置为E的项目,而不是所有在任何位置包含E的项目。
我不确定为什么这不起作用,但我希望我已经解释得很好。
答案 0 :(得分:2)
contains()
期望将singleton作为第一个参数传递。如果收到多个节点,则仅评估第一个节点。这解释了为什么XPath在您的测试中没有返回名称为Item
的{{1}}。
在您必须使用C
的情况下,正确的方法是在单个contains()
元素上应用该方法:
Location
答案 1 :(得分:0)
更改此
train_generator = ImageDataGenerator(rescale=1./255).flow_from_directory(
'data/train/',
classes=['class1','class2','class3','class4','class5'],
target_size=(64, 64),
class_mode='categorical')
进入这个
$filter = $xml->xpath("//Items/Item[contains(Locations/Location,'".$LocationFilter."')]");
修复了问题,现在项目正常显示。