0

ページの 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_lev1 つのレベルと新しく追加されたノードに戻る必要がある場合$lev > $curr_lev現在のノードが最後に追加されたノードの子である場合、最後に追加されたノードの親の「兄弟」です。

最初の問題は、実行すると次のエラーが発生することです。

致命的なエラー: C:\Users\Jacopo\Dropbox\Tirocinio\xampp-portable\htdocs\sites\prova\cerca categorie.php:71 でメッセージ '無効な文字エラー' を含む例外 'DOMException' がキャッチされませんでした: 71
スタック トレース:
#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(オブジェクト(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 kit」のように見え、 $link「/joomla/component/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()は返されませんが、ファイルには何も書き込まれません!

私は何を間違っていますか?私がそれらのことを扱うのは初めてなので、優しくしてください:)

4

1 に答える 1

1

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 要素名内では無効です。問題を修正すると、自分のものを追加できるようになります。最後に有効な要素名を使用してください。

于 2013-03-06T13:04:24.057 に答える