Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 通过SimpleXMLElement访问XML加载中的嵌套节点_Php_Xml_Simplexml - Fatal编程技术网

Php 通过SimpleXMLElement访问XML加载中的嵌套节点

Php 通过SimpleXMLElement访问XML加载中的嵌套节点,php,xml,simplexml,Php,Xml,Simplexml,我有一个具有这种结构的XML文件 <?xml version="1.0" encoding="ISO-8859-1"?> <COMMUNITIES> <COMMUNITY ID="c001"> <NAME>Town Services</NAME> <TOP>50</TOP> <LEFT>50</LEFT> <

我有一个具有这种结构的XML文件

    <?xml version="1.0" encoding="ISO-8859-1"?>
    <COMMUNITIES>
    <COMMUNITY ID="c001">
      <NAME>Town Services</NAME> 
      <TOP>50</TOP> 
      <LEFT>50</LEFT> 
      <WIDTH>200</WIDTH> 
      <HEIGHT>300</HEIGHT> 
      <URLS>
          <URL ID="U001">
              <NAME>Google.com</NAME>
              <URL>http://www.google.com</URL>
          </URL>
          <URL ID="U002">
              <NAME>Bing.com</NAME>
              <URL>http://www.bing.com</URL>
          </URL>
          <URL ID="U003">
              <NAME>Yahoo.com</NAME>
              <URL>http://www.yahoo.com</URL>
          </URL>
          <URL ID="U004">
              <NAME>Aol.com</NAME>
              <URL>http://www.aol.com</URL>
          </URL>
      </URLS> 
      </COMMUNITY>
</COMMUNITIES>

城市服务
50
50
200
300
古戈尔
http://www.google.com
必应网
http://www.bing.com
雅虎网站
http://www.yahoo.com
美国在线
http://www.aol.com
我能够通过这个脚本获得第一级元素名称

<?php

function get_nodes() {
// load SimpleXML
$nodes = new SimpleXMLElement('communities.xml', null, true);

foreach($nodes as $node) // loop through 
{

        echo "<div id = '".$node['ID']."' class= 'comdiv ui-widget-content' style = 'top: ".$node->TOP."px; left: ".$node->LEFT."px; width: ".$node->WIDTH."px; height: ".$node->HEIGHT."px;'> \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";


        $nodeid = $node['ID'];

        $xurls = $node->URL; // WHAT IS THE WAY TO GET TO <URLS> and LOOP THOUGH ALL <URL> NODES
        $nurls = sizeof($xurls);

}
        echo "<script type='text/javascript'>\n";
        echo "  $('.editableText').editableText();\n";
        echo "</script>\n";

   return;
}

echo get_nodes();
?>

我不太确定您到底在寻找什么,但这可能很有用:

$node->children()返回节点的子节点,您可以轻松循环:

foreach ($node->URLS->children() as $child)
{
    print $child->URL;
}

HTH

我不太确定您到底在寻找什么,但这可能很有用:

$node->children()返回节点的子节点,您可以轻松循环:

foreach ($node->URLS->children() as $child)
{
    print $child->URL;
}
HTH

您可以尝试使用

$urls = $node->xpath('URLS/URL');
foreach($urls as $url) {}
但似乎您的代码中有错误。而不是$node->URL*S*;您可以使用$node->URL;。试着替换

您可以尝试使用

$urls = $node->xpath('URLS/URL');
foreach($urls as $url) {}

但似乎您的代码中有错误。而不是$node->URL*S*;您可以使用$node->URL;。试着替换

稍长一点,但对我有效

$nodes = new SimpleXMLElement('communities.xml', null, true);

foreach($nodes->COMMUNITY->URLS->URL as $url) {
 echo $url['ID'];
 echo $url->NAME;
 echo $url->URL;
}

稍微长一点,但对我有用

$nodes = new SimpleXMLElement('communities.xml', null, true);

foreach($nodes->COMMUNITY->URLS->URL as $url) {
 echo $url['ID'];
 echo $url->NAME;
 echo $url->URL;
}

谢谢你的建议。他们都给了我比以前更多的关于访问嵌套节点的信息。我同意杰米建议的修改版本。对于每个社区节点,我通过这个循环访问URL

    foreach($node->URLS->URL as $url)
    { 
       // Print HTML elements with the URL information
    }
这是完整的工作脚本

<?php

function get_nodes() {
// load SimpleXML
$nodes = new SimpleXMLElement('communities.xml', null, true);

foreach($nodes as $node) // loop through 
{

        echo "<div id = '".$node['ID']."' class= 'comdiv ui-widget-content' style = 'top: ".$node->TOP."px; left: ".$node->LEFT."px; 

width: ".$node->WIDTH."px; height: ".$node->HEIGHT."px;'> \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";

        foreach($node->URLS->URL as $url)
        { 
           echo "<script type='text/javascript'> alert('Node: ".$node['ID']." has URLS:".$url['ID']." ".$url->NAME." ".$url->URL." '); 

</script>";
        }


}
        echo "<script type='text/javascript'>\n";
        echo "  $('.editableText').editableText();\n";
        echo "</script>\n";

   return;
}

echo get_nodes();

?>

谢谢你的建议。他们都给了我比以前更多的关于访问嵌套节点的信息。我同意杰米建议的修改版本。对于每个社区节点,我通过这个循环访问URL

    foreach($node->URLS->URL as $url)
    { 
       // Print HTML elements with the URL information
    }
这是完整的工作脚本

<?php

function get_nodes() {
// load SimpleXML
$nodes = new SimpleXMLElement('communities.xml', null, true);

foreach($nodes as $node) // loop through 
{

        echo "<div id = '".$node['ID']."' class= 'comdiv ui-widget-content' style = 'top: ".$node->TOP."px; left: ".$node->LEFT."px; 

width: ".$node->WIDTH."px; height: ".$node->HEIGHT."px;'> \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";

        foreach($node->URLS->URL as $url)
        { 
           echo "<script type='text/javascript'> alert('Node: ".$node['ID']." has URLS:".$url['ID']." ".$url->NAME." ".$url->URL." '); 

</script>";
        }


}
        echo "<script type='text/javascript'>\n";
        echo "  $('.editableText').editableText();\n";
        echo "</script>\n";

   return;
}

echo get_nodes();

?>

我得到一个错误:
致命错误:在第67行的C:\inetpub\wwwroot\community\get_nodes.php中调用未定义的方法domeElement::xpath()
您的代码中似乎有错误。而不是$node->url;您可以使用$node->URL;。尝试替换。我得到一个错误:
致命错误:在第67行的C:\inetpub\wwwroot\community\get_nodes.php中调用未定义的方法domeElement::xpath()
似乎代码中有错误。而不是$node->url;您可以使用$node->URL;。尝试替换。我得到了children()的一个错误:`致命错误:调用C:\inetpub\wwwroot\community\get_nodes.php中未定义的方法domeElement::children(),在第76行'使用$node->url->children()进行尝试。我错了!我得到了children()的一个错误:`致命错误:调用C:\inetpub\wwwroot\community\get\u nodes.php中未定义的方法domeElement::children(),在第76行'尝试使用$node->url->children()。我错了!因为我对特定节点的URL感兴趣,所以我不得不对代码做一些轻微的修改。在
foreach($nodes…{}循环中
,我检索了如下
foreach($nodes->URL->URL作为$URL){}
。这很有效。谢谢你给我指出了正确的方向。我不得不对代码做一些轻微的修改,因为我对特定节点的URL感兴趣。在
foreach($nodes…{}循环中
,我检索了如下
foreach($nodes->URL->URL作为$URL){}
。这很有效。谢谢你给我指明了正确的方向。