[英]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.