2011-08-19 2 views
0

이 웹 페이지에는 XML 데이터를 기반으로 페이지에서 div를 다시 만들 수있는 PHP 스크립트가 있습니다. 이 스크립트는 <body> </body> 안에있는 HTML 페이지에서 직접 호출됩니다.XML SimpleXMLElement가 노드를 반환합니다. DOMXPath가 오류를 반환합니다.

<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)에 포함 된 각 URL에 표시 할 텍스트, URLC : 텍스트 (http://google.com)에 해당하는 url. 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> 

이상한 문제

다른 곳, 자바 스크립트 기능에서 아약스 호출에 나는 아무 문제없이 XPath를 가진 XML 파일에서 정보를 얻을 수 있다는 것입니다. 왜 그런 상황에서 DOMXPath 메서드가 작동하지 않습니까?

편집 * 새 정보

는 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>&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(); 

?> 
+0

어떤 오류가 발생합니까? – Gordon

+0

이상하게도 오류는 없지만 DOMXPath가 노드를 찾지 못하는 것 같습니다. – user823527

답변

0

폴더 권한 문제가 있었다. XML이 들어있는 폴더에 스크립트가 업데이트 된 XML을 쓰도록 설정된 권한이 없습니다.

0

커뮤니티는 xml의 루트가 아닙니다. 시도하십시오 $nodes = $xpath->query('//COMMUNITY');

이것은 XML 문서의 모든 커뮤니티 노드를 선택해야합니다. 당신은 그들 만이 루트 요소의 아이가있을 때를 선택하려면, 다음 시도 :

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

+0

시도해 본'$ dom = new DOMDocument(); $ dom-> load ('communities.xml'); $ xpath = 새로운 DOMXPath ($ dom); $ nodes = $ xpath-> query ('/ COMMUNITIES/COMMUNITY');'이것은 노드를 반환하지 않습니다. SimpleXMLElement는 다음과 같이합니다 :'$ nodes = new SimpleXMLElement ('communities.xml', null, true); ' – user823527

+0

xpath를 사용하여 노드 정보를 얻을 수 있었을 때 자바 스크립트 함수에서 php로 아약스를 호출했습니다. 그 이유는 xpath가 HTML 페이지에서 직접 호출 될 때 노드를 반환하지 않는 이유를 설명합니까? – user823527

관련 문제