亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

PHP RSS XML 再次解析、過濾和展示

PHP RSS XML 再次解析、過濾和展示

PHP
元芳怎么了 2023-05-26 17:52:11
我正在使用DOMDocument. 那很好用。我需要解析我的 XML,找到特定的值,然后只再次顯示某些節點。XML 看起來像這樣......<rss version="2.0">  <channel>  <title>Title</title>  <link></link>  <item>    <title>Title #1</title>    <description>Here I want to filter</description>  </item>  <item>    <title>Title #2</title>    <description>Should not be displayed</description>  </item></channel>我想在描述標簽內搜索,如果找到關鍵字我想顯示item. 如果找不到,我想刪除 parent item。到目前為止,這就是我嘗試過的...<?phpheader('Content-Type: text/xml');// Load our XML document$rss = new DOMDocument();$rss->load('https://myurl');$description = $rss->getElementsByTagName('description');foreach ($description as $node) {    $s = $node->nodeValue;    if (strpos($s, 'filter') !== false)    {      //found the keyword, nothing to delete    }    else    {      //didnt find it, now delete item      $node->parentNode->parentNode->removeChild($node->parentNode);    }}echo $description->saveXml();我正在嘗試獲取所有描述節點,檢查它們是否包含字符串,如果不包含,則刪除父節點。搜索字符串有效,但刪除節點無效。如果我回顯我的 XML,則沒有任何改變。
查看完整描述

1 回答

?
慕桂英3389331

TA貢獻2036條經驗 獲得超8個贊

getElementsByTagName()將返回“實時”結果。如果您修改文檔,它將發生變化。您可以用來iterator_to_array()制作穩定的副本。


另一種選擇是使用 Xpath 表達式來獲取特定節點。


$document = new DOMDocument();

$document->loadXML($xmlString);

$xpath = new DOMXpath($document);


// fetch items that contain "filter" in their description

$items = $xpath->evaluate('/rss/channel/item[contains(description, "filter")]');

foreach ($items as $item) {

    // dump the title child element text content

    var_dump($xpath->evaluate('string(title)', $item));


// fetch items that do not contain "filter" in their description

$items = $xpath->evaluate('/rss/channel/item[not(contains(description, "filter"))]');

foreach ($items as $item) {

    // remove item element

    $item->parentNode->removeChild($item);

echo $document->saveXML();

輸出:


string(8) "Title #1"

<?xml version="1.0"?>

<rss version="2.0">

  <channel>

  <title>Title</title>

  <link/>

  <item>

    <title>Title #1</title>

    <description>Here I want to filter</description>

  </item>


</channel>

</rss>


查看完整回答
反對 回復 2023-05-26
  • 1 回答
  • 0 關注
  • 198 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號