1

「ロック」という単語を含む属性を持つすべてのノードを選択したいのですが、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 に答える