在这个网页中,我有一个php脚本基于XML数据在页面上重新创建div。该脚本直接从<body> </body>
中的HTML页面调用。
<body>
<div id="page" class="demo">
</div>
<?php
// script for recreating divs calls SimpleXMLElement or DOMXPath
?>
</body>
当我使用SimpleXMLElement获得XML节点时,没有错误,节点被返回。当我尝试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: text显示div (Google.com)中包含的每个url, 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>
奇怪的问题是,在其他地方,在javascript函数的ajax调用中,我使用xpath从XML文件中获取信息,没有任何问题。为什么DOMXPath方法不能在这种情况下工作?
编辑*新信息
这是通过ajax从html页面调用的php文件。这就是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();
?>
Community不是xml的根。试试$nodes = $xpath->query('//COMMUNITY');
这应该选择xml文档中的任何COMMUNITY节点。如果您只想在它们是根元素的子元素时选择它们,那么请尝试:
$nodes = $xpath->query('/COMMUNITIES/COMMUNITY');
文件夹权限问题。包含XML的文件夹没有为脚本编写更新后的XML设置权限。