簡體   English   中英

PHP DOMdocument問題(字符,文件)

[英]PHP DOMdocument problems (characters, file)

通過創建和瀏覽頁面的DOM樹,我提取了您在頁面左側看到的類別。 現在,我想創建一個新的DOM來將其存儲在服務器上,然后在本地重新加載它並加快整個過程。 我決定在探索原始DOM時這樣做。 對原始DOM的探索是可行的,因此假設參數正確。

我編寫以下代碼來創建DOM:

$curr_lev=1;
$mydom=new DOMdocument();
$curr_parent=$mydom->createElement('products');
function create_dom($name, $link, $lev){
    global $curr_lev;
    global $curr_parent;
    global $mydom;
    switch ($lev){
        case $curr_lev:
            $curr_parent->appendChild($mydom->createElement($name, $link));
            break;
        case $curr_lev-1:
            $curr_parent=$curr_padre->parentNode;
            $curr_parent->appendchild($mydom->createElemnt($name, $link));
            break;
        case $curr_lev+1:
            $curr_parent=$curr_padre->lastChild;
            $curr_parent->appendchild($mydom->createElement($name, $link));
            break;   
    }
    $curr_lev=$lev;
}

$mydom->formatOutput=TRUE;
$mydom->saveHTMLFile("products.xml");

我嘗試給出一個解釋: create_dom()為原始DOM的每個節點調用。 $lev表示新節點的級別, $curr_lev是最后添加的節點的級別,因此如果它們相等,則最后添加的節點和當前節點是同一父節點的子節點,如果$lev < $curr_lev我們必須返回一個級別,並且新添加的節點是最后添加的父節點的“兄弟”,如果$lev > $curr_lev則當前節點是最后添加的節點的子節點。

第一個問題是,當我執行該命令時,出現以下錯誤:

致命錯誤:C:\\ Users \\ Jacopo \\ Dropbox \\ Tirocinio \\ xampp-portable \\ htdocs \\ sites \\ prova \\ cerca categorie.php:71中出現消息“無效字符錯誤”的未捕獲異常'DOMException'
堆棧跟蹤:
#0 C:\\ Users \\ Jacopo \\ Dropbox \\ Tirocinio \\ xampp-portable \\ htdocs \\ sites \\ prova \\ cerca categorie.php(71):DOMDocument-> createElement('/ joomla / compone ...','Arduino')
#1 C:\\ Users \\ Jacopo \\ Dropbox \\ Tirocinio \\ xampp-portable \\ htdocs \\ sites \\ prova \\ cerca categorie.php(30):create_dom('Arduino','/ joomla / compone ...',1)
#2 C:\\ Users \\ Jacopo \\ Dropbox \\ Tirocinio \\ xampp-portable \\ htdocs \\ sites \\ prova \\ cerca categorie.php(38):visita_raff(Object(DOMElement),1,'dl')
#3 C:\\ Users \\ Jacopo \\ Dropbox \\ Tirocinio \\ xampp-portable \\ htdocs \\ sites \\ prova \\ cerca categorie.php(96):visita_raff(Object(DOMElement),0,'')
#4 C:\\ Users \\ Jacopo \\ Dropbox \\ Tirocinio \\ xampp-portable \\ htdocs \\ sites \\ prova \\ index.php(21):include('C:\\ Users \\ Jacopo ...')#5 {main}拋出在C:\\ Users \\ Jacopo \\ Dropbox \\ Tirocinio \\ xampp-portable \\ htdocs \\ sites \\ prova \\ cerca categorie.php中的第71行

$name通常看起來像“ arduino工具包”,而$link看起來像“ / joomla / componenent / virtuamart / ...”

我嘗試將其轉換為UTF-8,但無法正常工作

我也嘗試過測試並編寫以下代碼:

function create_xml(){
    $mydom=new DOMdocument("1.0", "ISO-8859-1");
    $primoElem=$mydom->createElement('foo');
    $primoElem->appendChild($mydom->createElement('arduinio', 'http:arduino'));
    $mydom->formatOutput=TRUE;
    return $mydom->saveXML("foo.xml");
}

我沒有收到任何錯誤saveXML()返回1,但是沒有任何內容寫入文件!

我究竟做錯了什么? 請考慮這是我第一次處理這些事情,所以請保持謙遜:)

帶有消息的Exception DOMException

無效的字符錯誤

表示您已嘗試創建一個元素( DOMDocument::createElement() ),該元素在元素名稱中包含無效字符:

$mydom->createElement($name, $link)
                        ^
                        |
           first parameter is the element name

在XML中,並非每個名稱都是有效的,有些甚至包含無效字符(例如,空格" "或反斜杠/ )或無效字節序列,這些字符不是Unicode UTF-8范圍的。 PHP中的DOMDocument僅接受UTF-8作為輸入。 所以對於一般。 如果要深入了解XML元素名稱中哪些字符有效,可以在如何檢查字符串是否為有效XML元素名稱中找到生活中可能需要的更多信息

因此,現在,如果您仔細查看錯誤消息的堆棧跟蹤,您甚至可能會發現問題:

 DOMDocument->createElement('/joomla/compone...', 'Arduino') ^ ^ 

/字符在XML元素名稱中無效。 解決此問題,您應該可以只添加您的東西。 只需使用最后一個有效的元素名稱即可。

暫無
暫無

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

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