XML SimpleXMLElement возвращает узлы, DOMXPath возвращает ошибку - PullRequest
0 голосов
/ 19 августа 2011

На этой веб-странице у меня есть php-скрипт для воссоздания div на странице на основе данных XML.Сценарий вызывается прямо со страницы HTML внутри <body> </body>.

<body>
 <div id="page" class="demo">
 </div>

 <?php
   // script for recreating divs calls SimpleXMLElement or DOMXPath
 ?>
</body>

Когда я получаю узлы XML с SimpleXMLElement, ошибок нет, узлы возвращаются.Когда вместо этого я пытаюсь использовать DOMXPath, возникают ошибки.

Возвращает узлы.

$nodes = new SimpleXMLElement('communities.xml', null, true);

foreach($nodes as $node) // loop through 
{
  //restore divs from node information      
}

Не возвращает узлы и выдает ошибки.

$dom = new DOMDocument();
$dom->load('communities.xml');
$xpath = new DOMXPath($dom);
$nodes = $xpath->query('COMMUNITY');

foreach($nodes as $node) // loop through 
{
  //restore divs from node information      
}

Чтобы расширить скрипт, чтобы получить больше информации от узлов, я подумал об использовании xpath.Дополнительная информация, которую я хочу показать: NAME: текст, отображаемый для каждого URL-адреса, содержащегося в div (Google.com), URLC: URL-адрес, соответствующий тексту (http://google.com). Файл XML имеет такие узлы, как этот.

<?xml version="1.0" encoding="ISO-8859-1" ?> 
<COMMUNITIES>
  <COMMUNITY ID="c000010">
    <NAME>New000010</NAME> 
    <TOP>50</TOP> 
    <LEFT>50</LEFT> 
    <WIDTH>150</WIDTH> 
    <HEIGHT>150</HEIGHT> 
    <URLS>
      <URL ID="u000038">
        <NAME>Google.com</NAME> 
        <URLC>http://google.com</URLC> 
      </URL>
    </URLS>
  </COMMUNITY>
</COMMUNITIES>

Странная проблема заключается в том, что в других случаях при вызовах ajax из функций javascript я без проблем получаю информацию из файла XML с помощью xpath. Почему метод DOMXPath не работает в такой ситуации?

РЕДАКТИРОВАТЬ * НОВАЯ ИНФОРМАЦИЯ

Вот php-файл, вызванный через ajax со страницы html. Именно здесь работает SimpleXMLElement. Но если я пытаюсь создать новый DOMdocument(), тогда вызовите xpath.новый документ DOM не создан.

<?php

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

$dom = new DOMDocument();
$dom->load('communities.xml');

// get document element  

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

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

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

height: ".$node->HEIGHT.";'> \n";            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";

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

   return;
}

echo get_nodes();

?>

Ответы [ 2 ]

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

Были проблемы с разрешением папки. Папка, содержащая XML, не имеет разрешения для сценария записи обновленного XML.

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

Сообщество не является корнем XML. Попробуйте $nodes = $xpath->query('//COMMUNITY');

Это должно выбрать любые узлы COMMUNITY в вашем XML-документе. Если вы хотите выбрать их, только когда они являются дочерними элементами корневого элемента, попробуйте:

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

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