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

时间:2011-08-19 19:26:56

标签: php xml dom

在这个网页中,我有一个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:为div(Google.com)中包含的每个网址显示的文字,URLC:与文字(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方法在这种情况下不起作用?

编辑*新信息

这是从html页面通过ajax调用的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>&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 :(得分:0)

社区不是xml的根。试试$nodes = $xpath->query('//COMMUNITY');

这应该选择xml文档中的任何COMMUNITY节点。如果您只想在它们是根元素的子元素时选择它们,请尝试:

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

答案 1 :(得分:0)

有文件夹权限问题。包含XML的文件夹没有为脚本编写更新的XML的权限集。