du512926 2013-11-25 18:14
浏览 37
已采纳

获取特定节点中xml文件中段落标记内的文本

I have this xml file

http://www.metacafe.com/tags/cats/rss.xml

With this code:

$xml = simplexml_load_file('http://www.metacafe.com/tags/cats/rss.xml', 'SimpleXMLElement', LIBXML_NOCDATA);
echo $xml->channel->item->title . "<br>";
echo $xml->channel->item->description . "<br>";

I get this OUTPUT:

Dad Challenges Kids to Climb Walls to Get Candy<br>
<a href="http://www.metacafe.com/watch/cb-M0fIp1ctKtsn/dad_challenges_kids_to_climb_walls_to_get_candy/"><img src="http://s3.mcstatic.com/thumb/11150410/28824820/4/directors_cut/0/1/dad_challenges_kids_to_climb_walls_to_get_candy.jpg?v=1" align="right" border="0" alt="Dad Challenges Kids to Climb Walls to Get Candy" vspace="4" hspace="4" width="134" height="78" /></a>
                <p>
                Nick Dietz compiles some of the week's best viral videos, 
                including an elephant trying really hard to break a stick, a cat
                sunbathing and kids climbing up the walls to get candy. Plus, 
                making  music with a Ford Fiesta.                              
                <br>Ranked <strong>4.00</strong> / 5 | 78 views | <a href="http://www.metacafe.com/watch/cb-M0fIp1ctKtsn/dad_challenges_kids_to_climb_walls_to_get_candy/">0 comments</a><br/>
                </p>
                <p>
                 <a href="http://www.metacafe.com/watch/cb-M0fIp1ctKtsn/dad_challenges_kids_to_climb_walls_to_get_candy/"><strong>Click here to watch the video</strong></a> (02:38)<br/>
                    Submitted By:                       <a href="http://www.metacafe.com/channels/CBS/">CBS</a><br/>
                    Tags:
                    <a href="http://www.metacafe.com/topics/penna/">Penna</a>&nbsp;
                    <a href="http://www.metacafe.com/topics/bjbj/">Bjbj</a>&nbsp;
                    <a href="http://www.metacafe.com/topics/ciao/">Ciao</a>&nbsp;                   <br/>
                    Categories: <a href='http://www.metacafe.com/videos/entertainment/'>Entertainment</a>
               </p>

        <br>

I need get this output (than its need remove all others elements):

Dad Challenges Kids to Climb Walls to Get Candy
Nick Dietz compiles some of the week's best viral videos, 
including an elephant trying really hard to break a stick, a cat
sunbathing and kids climbing up the walls to get candy. Plus, 
making  music with a Ford Fiesta.

I dont know how proceed to get this result.

  • 写回答

1条回答 默认 最新

  • douhui8163 2013-11-25 18:24
    关注

    The reason you're getting the elements inside description is the CDATA section. For the XML-Parser the content of a CDATA session is always text. Elements like a <p> are not read into the DOM structure.

    A simple strip_tags() will delete all elements. For more control you need to load the html fragment into a DOM:

    $html = <<<'HTML'
    <a href="http://www.metacafe.com/watch/cb-M0fIp1ctKtsn/dad_challenges_kids_to_climb_walls_to_get_candy/"><img src="http://s3.mcstatic.com/thumb/11150410/28824820/4/directors_cut/0/1/dad_challenges_kids_to_climb_walls_to_get_candy.jpg?v=1" align="right" border="0" alt="Dad Challenges Kids to Climb Walls to Get Candy" vspace="4" hspace="4" width="134" height="78" /></a>
                    <p>
                    Nick Dietz compiles some of the week's best viral videos, 
                    including an elephant trying really hard to break a stick, a cat
                    sunbathing and kids climbing up the walls to get candy. Plus, 
                    making  music with a Ford Fiesta.                              
                    <br>Ranked <strong>4.00</strong> / 5 | 78 views | <a href="http://www.metacafe.com/watch/cb-M0fIp1ctKtsn/dad_challenges_kids_to_climb_walls_to_get_candy/">0 comments</a><br/>
                    </p>
                    <p>
                     <a href="http://www.metacafe.com/watch/cb-M0fIp1ctKtsn/dad_challenges_kids_to_climb_walls_to_get_candy/"><strong>Click here to watch the video</strong></a> (02:38)<br/>
                        Submitted By:                       <a href="http://www.metacafe.com/channels/CBS/">CBS</a><br/>
                        Tags:
                        <a href="http://www.metacafe.com/topics/penna/">Penna</a>&nbsp;                 <br/>
                        Categories: <a href='http://www.metacafe.com/videos/entertainment/'>Entertainment</a>
                   </p>
    
            <br>
    HTML;
    
    $dom = new DOMDocument();
    $dom->loadHtml($html);
    $xpath = new DOMXPath($dom);
    
    $content = $xpath->evaluate("string(//p[1]/text())");
    var_dump($content);
    

    The Xpath Expression

    //p/text()[1] is the first text node inside a p. The string() function converts it into a string. If the node does not exists, the expression will return an empty string.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 delta降尺度计算的一些细节,有偿
  • ¥15 Arduino红外遥控代码有问题
  • ¥15 数值计算离散正交多项式
  • ¥30 数值计算均差系数编程
  • ¥15 redis-full-check比较 两个集群的数据出错
  • ¥15 Matlab编程问题
  • ¥15 训练的多模态特征融合模型准确度很低怎么办
  • ¥15 kylin启动报错log4j类冲突
  • ¥15 超声波模块测距控制点灯,灯的闪烁很不稳定,经过调试发现测的距离偏大
  • ¥15 import arcpy出现importing _arcgisscripting 找不到相关程序