Php 如何检索xml中所有元素中的所有数据?

Php 如何检索xml中所有元素中的所有数据?,php,xml,simplexml,Php,Xml,Simplexml,我在php中获取xml数据时遇到问题 我的xml相当复杂,标记中有几个嵌套的子项 xml ?xml version=“1.0”encoding=“UTF-8”> 考试题目 内容1 机会。 测试数据。 2008 …更多元素 更多内容。。 我的密码 //I need to load many different xml files. $xml_file = simplexml_load_file($filename); foreach ($xml_file->chil

我在php中获取xml数据时遇到问题

我的xml相当复杂,标记中有几个嵌套的子项

xml

?xml version=“1.0”encoding=“UTF-8”>
考试题目
内容1
机会。
测试数据。
2008
…更多元素
更多内容。。
我的密码

//I need to load many different xml files.

 $xml_file = simplexml_load_file($filename);
          foreach ($xml_file->children() as $child){
              echo $child->getName().':'. $child."<br>";
          }
//我需要加载许多不同的xml文件。
$xml\u file=simplexml\u load\u文件($filename);
foreach($xml\u file->children()作为$child){
echo$child->getName().:.$child.
; }
上面的代码只会显示

book、title、figure、ch
但不包括
ch
标记内的元素。如何显示每个标记内的所有元素?有什么建议吗?非常感谢

有两件事:

  • 您需要匹配您的
    标记

  • 您的foreach需要是递归的。您应该检查foreach中的每个项是否都有子项,然后递归地对该元素进行foreach。我建议对此使用一个单独的函数,您可以递归调用它

  • 例如:

    $xml_file = simplexml_load_file($filename);
    parseXML($xml_file->children());
    function parseXML($xml_children)
    {
        foreach ($xml_children as $child){
            echo $child->getName().':'. $child."<br>";
            if ($child->count() > 0)
            {
                parseXML($child->children());
            }
        }
    }
    
    $xml\u file=simplexml\u load\u文件($filename);
    parseXML($xml_file->children());
    函数parseXML($xml\u子函数)
    {
    foreach($xml_children作为$child){
    echo$child->getName().:.$child.
    ; 如果($child->count()>0) { parseXML($child->children()); } } }
    两件事:

  • 您需要匹配您的
    标记

  • 您的foreach需要是递归的。您应该检查foreach中的每个项是否都有子项,然后递归地对该元素进行foreach。我建议对此使用一个单独的函数,您可以递归调用它

  • 例如:

    $xml_file = simplexml_load_file($filename);
    parseXML($xml_file->children());
    function parseXML($xml_children)
    {
        foreach ($xml_children as $child){
            echo $child->getName().':'. $child."<br>";
            if ($child->count() > 0)
            {
                parseXML($child->children());
            }
        }
    }
    
    $xml\u file=simplexml\u load\u文件($filename);
    parseXML($xml_file->children());
    函数parseXML($xml\u子函数)
    {
    foreach($xml_children作为$child){
    echo$child->getName().:.$child.
    ; 如果($child->count()>0) { parseXML($child->children()); } } }
    您需要进行恢复呼叫

    parseAllXml($xml_file);
    
    function parseAllXml($xmlcontent)
    {
     foreach($xmlcontent->children() as $child)
       {
         echo $child->getName().':'. $child."<br>";
         $is_further_child = ( count($child->children()) >0 )?true:false;  
         if( $is_further_child )
         {
            parseAllXml($child);
         }   
     }
    }
    
    parseAllXml($xml\u文件);
    函数parseAllXml($xmlcontent)
    {
    foreach($xmlcontent->children()作为$child)
    {
    echo$child->getName().:.$child.
    ; $is\u further\u child=(count($child->children())>0)?true:false; 如果($是孩子) { parseAllXml($child); } } }
    您需要进行恢复呼叫

    parseAllXml($xml_file);
    
    function parseAllXml($xmlcontent)
    {
     foreach($xmlcontent->children() as $child)
       {
         echo $child->getName().':'. $child."<br>";
         $is_further_child = ( count($child->children()) >0 )?true:false;  
         if( $is_further_child )
         {
            parseAllXml($child);
         }   
     }
    }
    
    parseAllXml($xml\u文件);
    函数parseAllXml($xmlcontent)
    {
    foreach($xmlcontent->children()作为$child)
    {
    echo$child->getName().:.$child.
    ; $is\u further\u child=(count($child->children())>0)?true:false; 如果($是孩子) { parseAllXml($child); } } }
    至少您的
    标记不匹配。抱歉,这只是一个输入错误,至少您的
    标记不匹配。抱歉,这只是一个输入错误。有一个错误说没有定义hasChildren…+1。请尝试
    if($child->count()>0)
    。有一个错误说没有定义hasChildren…+1。请尝试
    if($child->count()>0)