Php XML SimpleXMLElement返回节点,DOMXPath返回错误

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 { //

在这个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 
{
  //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>&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();

?>