我想选择具有包含单词“Rock”的属性的所有节点,但我不知道如何使用PHP的SimpleXML库来实现这一点。我尝试将星号(通配符)字符附加到属性值,但这不起作用。
这是XML文件的片段。
<?xml version="1.0" encoding="Shift-JIS"?>
<CDs>
<Cat Type="Rock">
<CD>
<Name>Elvis Prestley</Name>
<Album>Elvis At Sun</Album>
</CD>
<CD>
<Name>Elvis Prestley</Name>
<Album>Best Of...</Album>
</CD>
</Cat>
<Cat Type="RocknRoll">
<CD>
<Name>The Beatles</Name>
<Album>Best of...</Album>
</CD>
</Cat>
<Cat Type="JazzBlues">
<CD>
<Name>B.B. King</Name>
<Album>Singin' The Blues</Album>
</CD>
<CD>
<Name>B.B. King</Name>
<Album>The Blues</Album>
</CD>
</Cat>
</CDs>
这是我的PHP代码:
<?php
$xml = new XMLReader();
$xml->open("MusicCatalog.xml") or die ("can't open file");
foreach($xml->xpath("Cat[@Type='Rock*']/@Type") as $c) {
print($c) . PHP_EOL;
}
?>
非常感谢。
答案 0 :(得分:3)
我相信你可以使用starts-with()
:
$xml->xpath("Cat[starts-with(@Type,'Rock')]/@Type")
这是works in my demo,但我使用的是SimpleXML。这应该没关系,因为我相信SimpleXML和XMLReader都使用了libxml。此外,XMLReader::xpath()
在我的测试机器上未定义,我在文档中没有看到它。