0

私の問題は、XML コンテンツを持っていることです。PHP SimpleXMLElements() クラスで読みます。XML は次のようになります。

<search_result>
<movies>
     <movie>
        <title>Rambo 1</title>
     </movie>
     <movie>
        <title>Terminator 1</title>
     </movie>
     <movie>
        <title>Romeo and Juliett</title>
     </movie>
</movies>
<program>
    <item>
        <id>5405059</id>
        <show_date>03.22.</show_date>
        <show_time>14:30</show_time>
        <rfcdate>Fri, 22 Mar 2013 14:30:00 +0100</rfcdate>
        <title>Doku-cinema</title>
        <genre/>
        <channel_name>d1 Tv</channel_name>
        <channel_id>232</channel_id>
    </item>
    <item>
        <id>5405059</id>
        <show_date>03.22.</show_date>
        <show_time>14:30</show_time>
        <rfcdate>Fri, 22 Mar 2013 14:30:00 +0100</rfcdate>
        <title>Romantic-Romeo and Juliett</title>
        <genre/>
        <channel_name>d1 Tv</channel_name>
        <channel_id>232</channel_id>
    </item>
    <item>
        <id>5405059</id>
        <show_date>03.22.</show_date>
        <show_time>14:30</show_time>
        <rfcdate>Fri, 22 Mar 2013 14:30:00 +0100</rfcdate>
        <title>Doku-cinema</title>
        <genre/>
        <channel_name>d1 Tv</channel_name>
        <channel_id>232</channel_id>
    </item>
</program>

「Rome」の例を含むすべてのノードを見つけて、そのノードだけを取得したいと思います。つまり...例:

$xml = simplexml_load_file("moviecinemas.xml");
$searchNodes = $xml->xpath('//*[contains(.,'Romeo')]');

私はこの構造を取得したいと思います:

<item>
<id>5405059</id>
<show_date>03.22.</show_date>
<show_time>14:30</show_time>
<rfcdate>Fri, 22 Mar 2013 14:30:00 +0100</rfcdate>
<title>Romantic-Romeo and Juliett</title>
<genre/>
<channel_name>d1 Tv</channel_name>
<channel_id>232</channel_id>
</item>
<movie>
<title>Romeo and Juliett</title>
</movie>

どのように可能か、そしてどのように可能かはわかりません。

4

1 に答える 1

1

私が見ているのは、XPathの問題が少しあるだけです。ところで、あなたの質問では、サンプル XML の形式が正しくありません。search_resultノードの終了タグがありません。

これが実際の例です:

<?php
$xml = <<<XML
<search_result>
    <movies>
        <movie>
            <title>Rambo 1</title>
         </movie>
         <movie>
            <title>Terminator 1</title>
         </movie>
         <movie>
            <title>Romeo and Juliett</title>
         </movie>
    </movies>
    <program>
        <item>
            <id>5405059</id>
            <show_date>03.22.</show_date>
            <show_time>14:30</show_time>
            <rfcdate>Fri, 22 Mar 2013 14:30:00 +0100</rfcdate>
            <title>Doku-cinema</title>
            <genre/>
            <channel_name>d1 Tv</channel_name>
            <channel_id>232</channel_id>
        </item>
        <item>
            <id>5405059</id>
            <show_date>03.22.</show_date>
            <show_time>14:30</show_time>
            <rfcdate>Fri, 22 Mar 2013 14:30:00 +0100</rfcdate>
            <title>Romantic-Romeo and Juliett</title>
            <genre/>
            <channel_name>d1 Tv</channel_name>
            <channel_id>232</channel_id>
        </item>
        <item>
            <id>5405059</id>
            <show_date>03.22.</show_date>
            <show_time>14:30</show_time>
            <rfcdate>Fri, 22 Mar 2013 14:30:00 +0100</rfcdate>
            <title>Doku-cinema</title>
            <genre/>
            <channel_name>d1 Tv</channel_name>
            <channel_id>232</channel_id>
        </item>
    </program>
</search_result>
XML;

$sxe        = new SimpleXMLElement($xml);
$romeoItems = $sxe->xpath('//program/item[contains(./title, "Romeo")]');

print_r($romeoItems);

出力:

Array
(
    [0] => SimpleXMLElement Object
        (
            [id] => 5405059
            [show_date] => 03.22.
            [show_time] => 14:30
            [rfcdate] => Fri, 22 Mar 2013 14:30:00 +0100
            [title] => Romantic-Romeo and Juliett
            [genre] => SimpleXMLElement Object
                (
                )
            [channel_name] => d1 Tv
            [channel_id] => 232
        )
)
于 2013-04-26T11:36:01.800 に答える