Почему этот вызов DOMDocument не удается? - PullRequest
1 голос
/ 23 августа 2011

В этом PHP-скрипте я получаю информацию из XML-файла для создания элементов на HTML-странице.Если я читаю файл XML с помощью SimpleXMLElement, я могу получить информацию.Я хочу переключиться на использование xpath, чтобы упростить получение информации из вложенных узлов.Но как ни странно, вызов для создания DOMDocument не удается.Это $dom = new DOMDocument(); выходит из сценария PHP без каких-либо ошибок, чтобы сообщить мне, почему это происходит.

PHP-сценарий вызывается через ajax из javascript на странице.

Вот PHPscript.

<?php

function get_nodes() {
// load SimpleXML
/* $nodes = new SimpleXMLElement('communities.xml', null, true); */

$dom = new DOMDocument();  // The script fails here
$dom->load('communities.xml');

$dom->formatOutput = true; 
$dom->preserveWhiteSpace = true;

// get document element  

$xpath = new DOMXPath($dom);

$nodes = $xpath->query("//COMMUNITY"); 

$nnodes = sizeof($nodes);
echo "<script type='text/javascript'> alert('Got ".$nnodes." nodes'); </script>";

foreach($nodes as $node) // loop through 
{

        echo "<div id = '".$node['ID']."' class= 'comdiv ui-widget-content' style = 'top: ".$node->TOP."px; left: ".$node->LEFT."px; 

width: ".$node->WIDTH."px; height: ".$node->HEIGHT."px;'> \n";

        /* echo "<script> alert ('<div id = \'".$node['ID']."\' class= \'comdiv ui-widget-content\' style = \'top: ".$node->TOP."; left: 

".$node->LEFT."; width: ".$node->WIDTH."; height: ".$node->HEIGHT.";\'>') </script>";*/

        echo "   <p class = 'comhdr editableText ui-widget-header'>".$node->NAME."</p>\n";

        echo "   <a href='#' onClick=\"delete_div('".$node['ID']."');\">Delete</a>&nbsp;&nbsp;\n";
        echo "   <a href='#' onClick=\"add_url('".$node['ID']."');\">Add URL</a>&nbsp;&nbsp;\n";

        echo "</div> \n";

        echo "<script type='text/javascript'>\n";
        echo "  $('#".$node['ID']."').resizable();\n";
        echo "  $('#".$node['ID']."').draggable();\n";
        echo "  $('#".$node['ID']."').draggable('option', 'handle', '.comhdr');\n";
        echo "</script>\n";


        $nodeid = $node['ID'];

        /* $xurls = $xpath->query("//COMMUNITY[@ID='$nodeid']/URLS/URL");

        foreach($xurls as $xurl) {

           echo "a url";

        }*/

}
        echo "<script type='text/javascript'>\n";
        echo "  $('.editableText').editableText();\n";
        echo "</script>\n";

   return;
}

echo get_nodes();

?>

Это место на странице, где вызывается скрипт.

<body>

<div id="editdiv" class="comdiv ui-widget-content" style="position: absolute; top: 150px; left: 850px; width:350px; height:250px; border:1px solid grey;">
    <p id="heading" class="comhdr editableText ui-widget-header">Editable</p>
</div>

<script type="text/javascript">

 $(document).ready(function() {
               //define php info and make ajax call to recreate divs from XML data
               $.ajax({
                   url: "get_nodes.php",
                   type: "POST",
                   data: { },
                   cache: false,
                   success: function (response) {

                       if (response != '') 
                       {
                          $(document.body).append(response);

                       }
                   }
               });
 });

</script>

</body>

Существуют другие вызовы ajax, где я могу загрузить XML-файл с помощью DOMDocument.Единственное отличие состоит в том, что этот ajax-вызов относится к телу страницы.

1 Ответ

0 голосов
/ 23 августа 2011

Теперь, когда вы получили сообщение об ошибке, вот эта серия кода:

    echo "  $('#".$node['ID']."').resizable();\n";

Это должно быть $node->getAttribute('ID').

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...