如何使用PHP的SimpleXML库通过通配符字符串搜索选择属性

时间:2012-08-07 19:25:48

标签: php xml simplexml

我想选择具有包含单词“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;
    }

?>

非常感谢。

1 个答案:

答案 0 :(得分:3)

我相信你可以使用starts-with()

$xml->xpath("Cat[starts-with(@Type,'Rock')]/@Type")

这是works in my demo,但我使用的是SimpleXML。这应该没关系,因为我相信SimpleXML和XMLReader都使用了libxml。此外,XMLReader::xpath()在我的测试机器上未定义,我在文档中没有看到它。