1

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

?>

非常感谢你。

4

1 回答 1

3

我相信为此您可以使用starts-with()

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

在我的演示中有效,但是我使用的是 SimpleXML。没关系,因为我相信 SimpleXML 和 XMLReader 在底层都使用 libxml。此外,XMLReader::xpath()在我的测试机器上未定义,我在文档中没有看到它。

于 2012-08-07T19:43:55.620 回答