Php XML SimpleXMLElement返回节点,DOMXPath返回错误
在这个web页面中,我有一个php脚本,可以基于XML数据在页面上重新创建div。该脚本直接从内部的HTML页面调用 这不会返回节点并产生错误Php XML SimpleXMLElement返回节点,DOMXPath返回错误,php,xml,dom,Php,Xml,Dom,在这个web页面中,我有一个php脚本,可以基于XML数据在页面上重新创建div。该脚本直接从内部的HTML页面调用 这不会返回节点并产生错误 $dom = new DOMDocument(); $dom->load('communities.xml'); $xpath = new DOMXPath($dom); $nodes = $xpath->query('COMMUNITY'); foreach($nodes as $node) // loop through { //
$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>
社区不是xml的根。尝试$nodes=$xpath->query'//COMMUNITY' 这将选择xml文档中的任何社区节点。如果只想在它们是根元素的子元素时选择它们,请尝试:
$nodes=$xpath->query'/COMMUNITIES/COMMUNITY' 有文件夹权限问题。包含XML的文件夹没有为脚本设置写入更新的XML的权限。奇怪的是,现在没有错误,但DOMXPath似乎找不到节点。尝试了这个$dom=new DOMDocument$dom->加载“communities.xml”$xpath=newdomxpath$dom$nodes=$xpath->query'/COMMUNITIES/COMMUNITY';这不会返回节点。SimpleXMLElement处理:$nodes=new SimpleXMLElement'communities.xml',null,true;当我能够使用xpath获取节点信息时,这是通过javascript函数对php的ajax调用实现的。这是否解释了直接从HTML页面调用xpath时为什么不返回节点?
$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
}
<?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>
<?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();
?>