На этой веб-странице у меня есть 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> \n";
echo " <a href='#' onClick=\"add_url('".$node['ID']."');\">Add URL</a> \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();
?>