Компьютерный форум
Правила
Вернуться   Компьютерный форум > Форум программистов > Веб-программирование > XML & WML
Перезагрузить страницу Wrong Document Error как сиправить ошибки
Ответ
 
Опции темы Опции просмотра
  (#1 (permalink)) Старый
† Stratos † † Stratos † вне форума
Member
 
Сообщений: 46
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 26.08.2005
По умолчанию Wrong Document Error как сиправить ошибки - 14.05.2006, 18:12

есть код
Код:
$dom_res1 = new DomDocument();
    $dom_res1->load($file_asi1);

    if(!@file_exists($file_asi2)) {
        $dom_res2 = new DomDocument();
        $dom_res2->appendChild($dom_res2->createElement("questestinterop"));
    } else {
        $dom_res2 = new DomDocument();
        $dom_res2->load($file_asi2);
    }

    $parent=$dom_res1;
    $e_section=find_element($parent,'section','ident',$section_id);

    $e_section2=$e_section->ownerDocument;
    $root2=$dom_res2;
    $parent2=find_element($root2,'questestinterop');//находит элемент 'questestinterop' и делает переменную объектом DOMElement

    $temp=$dom_res2->createElement('a1');
try {
    $copy = $dom_res2->importNode($e_section,1);
    echo "yo: ".$copy->nodeName;
    $e_section2=$parent2->insertBefore($e_section, $copy);
} catch (Exception $e) {
    echo "<pre>";
    echo $e; die();
}
print_r($e_section2);die();
короче клонирование удачно происходит, но исключение все равно "вылетает".

подскажите плиз где тут не так?

=======================================
может будет попроще, если я скажу, что код был написан под domxml. и я его переписываю под dom стандарт.

код был следующий (работал корректно)

Код:
$dom_res1=@domxml_open_file($file_asi1);
    if(!file_exists($file_asi2))
    {
        $dom_res2 = domxml_new_doc("1.0");
        $dom_res2->append_child($dom_res2->create_element("questestinterop"));
    }
    else
    {
        $dom_res2=@domxml_open_file($file_asi2);
    }
    $root=$dom_res1->root();
    $parent=$root;
    $e_ass=find_element($root,'assessment','ident',$test_id);
        
    $e_ass2=$e_ass->owner_document();
    $root2=$dom_res2->root();
    $parent=$root2;

    $temp=$dom_res2->create_element('1');
    $e_ass2=$parent->insert_before ( $e_ass, $temp);
    $e_ass2=$parent->append_child($e_ass2);
    $temp->unlink_node();
Ответить с цитированием
  (#2 (permalink)) Старый
† Stratos † † Stratos † вне форума
Member
 
Сообщений: 46
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 26.08.2005
По умолчанию Wrong Document Error как сиправить ошибки - 14.05.2006, 18:12

есть код
Код:
$dom_res1 = new DomDocument();
    $dom_res1->load($file_asi1);

    if(!@file_exists($file_asi2)) {
        $dom_res2 = new DomDocument();
        $dom_res2->appendChild($dom_res2->createElement("questestinterop"));
    } else {
        $dom_res2 = new DomDocument();
        $dom_res2->load($file_asi2);
    }

    $parent=$dom_res1;
    $e_section=find_element($parent,'section','ident',$section_id);

    $e_section2=$e_section->ownerDocument;
    $root2=$dom_res2;
    $parent2=find_element($root2,'questestinterop');//находит элемент 'questestinterop' и делает переменную объектом DOMElement

    $temp=$dom_res2->createElement('a1');
try {
    $copy = $dom_res2->importNode($e_section,1);
    echo "yo: ".$copy->nodeName;
    $e_section2=$parent2->insertBefore($e_section, $copy);
} catch (Exception $e) {
    echo "<pre>";
    echo $e; die();
}
print_r($e_section2);die();
короче клонирование удачно происходит, но исключение все равно "вылетает".

подскажите плиз где тут не так?

=======================================
может будет попроще, если я скажу, что код был написан под domxml. и я его переписываю под dom стандарт.

код был следующий (работал корректно)

Код:
$dom_res1=@domxml_open_file($file_asi1);
    if(!file_exists($file_asi2))
    {
        $dom_res2 = domxml_new_doc("1.0");
        $dom_res2->append_child($dom_res2->create_element("questestinterop"));
    }
    else
    {
        $dom_res2=@domxml_open_file($file_asi2);
    }
    $root=$dom_res1->root();
    $parent=$root;
    $e_ass=find_element($root,'assessment','ident',$test_id);
        
    $e_ass2=$e_ass->owner_document();
    $root2=$dom_res2->root();
    $parent=$root2;

    $temp=$dom_res2->create_element('1');
    $e_ass2=$parent->insert_before ( $e_ass, $temp);
    $e_ass2=$parent->append_child($e_ass2);
    $temp->unlink_node();
Ответить с цитированием
  (#3 (permalink)) Старый
#0 #0 вне форума
Member
 
Сообщений: 407
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 28.01.2004
По умолчанию 15.05.2006, 20:13

Подробно искать, где и как что надо исправить, мне лень, но смысл такой: в PHP5 в соответствии со стандартом ты не можешь вставлять узел из одного документа в другой - см. в сторону doc2->importNode(doc1node, deep=TRUE).
Ответить с цитированием
  (#4 (permalink)) Старый
† Stratos † † Stratos † вне форума
Member
 
Сообщений: 46
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 26.08.2005
По умолчанию 16.05.2006, 05:29

я же написал
Цитата:
короче клонирование удачно происходит, но исключение все равно "вылетает".
читайте внимательнее мой код.

я просто не могу допереть, может я не туда клонирую, или как-то неправильно это делаю
Ответить с цитированием
  (#5 (permalink)) Старый
#0 #0 вне форума
Member
 
Сообщений: 407
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 28.01.2004
По умолчанию 16.05.2006, 05:51

Фиг чё в том коде можно понять. Форматирования нормального нет, имена переменных все заперепутаны. Вот это например:

Код:
$parent=$dom_res1;
$e_section=find_element($parent,'section','ident',$section_id); $e_section2=$e_section->ownerDocument;
Что за функция такая find_element()? Она возвращает, очевидно, узел документа $parent? Тогда у тебя один и тот же документ обозван тремя разными переменными: $dom_res1, $parent, и $e_section2 (потому что ownerDocument).

Во-первых, это бардак, а во-вторых, тогда получается, что вот эта строка:

Код:
$e_section2=$parent2->insertBefore($e_section, $copy);
содержит ссылки как на узлы второго документа ($copy), так и на узлы первого ($e_section, $e_section2)... Естественно, всё будет вылетать. Если же я и тут снова ошибся, ищи сам. Я не в состоянии понять, что этот код делает и зачем.
Ответить с цитированием
Ads.
  (#6 (permalink)) Старый
† Stratos † † Stratos † вне форума
Member
 
Сообщений: 46
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 26.08.2005
По умолчанию 16.05.2006, 06:12

вот и разбираюсь...
ибо код писал не я.
а тот кто писал, сам нифига не понимает..
даже назнаю как он и что написал?!


функция find_element ($a,$b,$c,$d)

находит и возвращает елемент $b корневого элемента $a с атрибутом $c в определенной части документа $d

примерно так
Ответить с цитированием
  (#7 (permalink)) Старый
† Stratos † † Stratos † вне форума
Member
 
Сообщений: 46
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 26.08.2005
По умолчанию 16.05.2006, 10:06

хоть ты и не смог помочь, все равно спасибо тебе #0. ты единственный откликнувшийся.
проблема решена.

Код:
    $dom_res1 = new DomDocument();
    $dom_res1->load($file_asi1);
    if(!@file_exists($file_asi2)) {
        $dom_res2 = new DomDocument();
        $dom_res2->appendChild($dom_res2->createElement("questestinterop"));
    } else {
        $dom_res2 = new DomDocument();
        $dom_res2->load($file_asi2);
    }

    $parent=$dom_res1;
    $e_section=find_element($parent,'section','ident',$section_id);

    $e_section2=$e_section->ownerDocument;

    $root2=$dom_res2;
    $parent=find_element($root2,'questestinterop');

    $temp=$dom_res2->createElement('a1');
    $temp=$parent->appendChild($temp);
    $copy_from_dom1_section = $dom_res2->importNode($e_section, 1);
    $new_section = $parent->insertBefore($copy_from_dom1_section, $temp);
    $new_section = $parent->appendChild($new_section);
    $temp->parentNode->removeChild($temp);
Ответить с цитированием
Ads
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Значение ошибки error C2044 illegal continue fetfrumos Visual C++ 4 29.11.2008 22:46
Компилятор выдает следующие ошибки: error C2501 Alex Dyller Вопросы начинающих программистов 7 13.10.2007 20:28
Значение ошибки error C2061 Fruit Visual C++ 9 12.10.2007 01:04
Значение ошибки error LNK2001 при компиляции проекта VolanD666 Visual C++ 3 16.05.2007 19:13
Значение ошибки error C2664 и как ее исправить Gorba4ev Visual C++ 1 17.04.2007 21:54
Вывод ошибки Range check error Зирк Вопросы начинающих программистов 29 03.06.2006 21:21
Как избавиться от ошибки OpenDialog-ERROR Just-Max Вопросы начинающих программистов 1 08.06.2005 21:02
error C3861: 'DDX_Text' как избавиться от этой ошибки johny Visual C++ 9 20.10.2004 13:34
Как избавиться от fatal error LNK1120 ошибки Merl1n Visual C++ 3 04.10.2004 13:27
Значение ошибки Error C0000005 при работе в Builder DenDem C++ Builder 4 24.09.2004 10:26
Значение ошибки error LNK2005 Демон самоубийств Visual C++ 6 29.10.2003 14:11
Исправление ошибки access violation error Anonymous Visual C++ 2 23.10.2003 17:56



Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Нardforum.ru - компьютерный форум и программирование, форум программистов