簡體   English   中英

DOMDocument缺少HTML標記

[英]DOMDocument missing HTML tags

我玩一個名為Tribalwars的在線游戲,現在正試圖編寫一個報告解析器。 典型的報告如下所示:

https://enp2.tribalwars.net/public_report/395cf3cc373a3b8873c20fa018f1aa07

我有兩個從php.net改編的函數,現在看起來如下:

function has_child($p)
{
    if ($p->hasChildNodes())
    {
        foreach ($p->childNodes as $c)
        {
            if ($c->nodeType == XML_ELEMENT_NODE)
            {
                return true;
            }
        }
    }
    return false;
}

function show_node($x)
{
    foreach ($x->childNodes as $p)
    {
        if ($this->has_child($p))
        {
            $this->show_node($p);
        }
        elseif ($p->nodeType == XML_ELEMENT_NODE)
        {
            if (trim($p->nodeValue) !== '')
            {
                $temp = explode("\n", $p->nodeValue);
                if (count($temp) == 1)
                {
                    $this->reportdata[] = trim($temp[0]);
                }
                else
                {
                    foreach ($temp as $k => $v)
                    {
                        if (trim($v) !== '')
                        {
                            $this->reportdata[] = trim($v);
                        }
                    }
                }
            }
        }
    }
}

它以以下格式返回結果:

Array
(
    [0] => MASHAD (27000) attacks 40-014-Devil...
    [1] => May 11, 2016  19:27:12
    [2] => MASHAD has won
    [3] => Attacker's luck
    ...
    [76] => Espionage
    [77] => Resources scouted:
    [78] => Building
    ...
    [112] => Haul:
    [113] => .
    [114] => .
    [115] => .
    [116] => .
    [117] => .
    ...
    [120] => https://enp2.tribalwars.net/public_report/395...
)

在大多數情況下,這是可行的,但是某些數據在解析中會丟失。 如果您查看鏈接中的報告,則會看到“資源搜尋”和“運輸”部分。 這兩個部分都包含<span> 由於某些原因,函數返回的數組中缺少這兩個部分。 (請參閱數組項目77和數組項目113-118)。 第113-118行僅顯示了. 在格式異常的數字中,第77行什么也沒有。

在調用show_node()函數的函數中,我做了一些處理以拋出不需要的不必要的DOM代碼:

$temp = explode('<h1>Publicized report</h1>', $report[0]['reportdata']);
$rep = $temp[1];
$temp = explode('For quick copy and paste', $rep);
$rep = '<report>' . $temp[0] . '</report>';
$x = new DOMDocument();
$x->loadHTML($rep);
$this->show_node($x->getElementsByTagName('report')->item(0));

如果我做的輸出$rep調用之前show_node()函數,我需要的信息HaulResources scouted存在。

可能是什么問題呢?

似乎DOMDocument對其在文檔中的深度或深度有限制。 這或者上面的遞歸代碼是錯誤的。 因此,我確定了未解析的代碼片段,看到它的格式正確,然后繼續使用str_replace()刪除了不需要的子str_replace() ,最終得到了數組中的值。 無論如何,此問題現在已解決。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM