【问题标题】:PHP SimpleXMLElements::xpath() not find valu detail in different XML structurePHP SimpleXMLElement::xpath() 在不同的 XML 结构中找不到值详细信息
【发布时间】:2013-03-22 10:56:32
【问题描述】:

我的问题是,我有一个 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>

我不知道这怎么可能,是的。

【问题讨论】:

    标签: php xpath simplexml


    【解决方案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
            )
    )
    

    【讨论】:

      猜你喜欢
      • 2023-04-03
      • 2011-01-17
      • 2020-11-06
      • 2013-11-14
      • 1970-01-01
      • 1970-01-01
      • 2010-12-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多