Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/252.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搜索xml中的所有子项_Php_Xml - Fatal编程技术网

使用php搜索xml中的所有子项

使用php搜索xml中的所有子项,php,xml,Php,Xml,我希望在不知道嵌套节点有多深的情况下,将所有子节点和子节点的子节点(基本上是所有节点)放在一个节点中。我想我可以使用循环,但我不确定是否有一个本机函数可以一次性为我检索所有这些数据 谢谢,我正在使用php中的simplexml\u load\u file()如果您想坚持使用simplexml,正如您在中看到的,只有一种方法可以使用。要获得嵌套的子项,您必须在这些子项上循环并查找它们-就像在文档中看到的Exampe#1中一样: $xml = new SimpleXMLElement( '<p

我希望在不知道嵌套节点有多深的情况下,将所有子节点和子节点的子节点(基本上是所有节点)放在一个节点中。我想我可以使用循环,但我不确定是否有一个本机函数可以一次性为我检索所有这些数据


谢谢,我正在使用php中的
simplexml\u load\u file()
如果您想坚持使用simplexml,正如您在中看到的,只有一种方法可以使用。要获得嵌套的子项,您必须在这些子项上循环并查找它们-就像在文档中看到的
Exampe#1
中一样:

$xml = new SimpleXMLElement(
'<person>
 <child role="son">
  <child role="daughter"/>
 </child>
 <child role="daughter">
  <child role="son">
   <child role="son"/>
  </child>
 </child>
</person>');

foreach ($xml->children() as $second_gen) {
    echo ' The person begot a ' . $second_gen['role'];

    foreach ($second_gen->children() as $third_gen) {
        echo ' who begot a ' . $third_gen['role'] . ';';

        foreach ($third_gen->children() as $fourth_gen) {
            echo ' and that ' . $third_gen['role'] .
                ' begot a ' . $fourth_gen['role'];
        }
    }
}
$xml=新的SimpleXMLElement(
'
');
foreach($xml->children()作为$second\u gen){
回声“人生一个”。$second_gen[“角色”];
foreach($second\u gen->children()作为$third\u gen){
回声“谁生了一个”$third_gen[“角色”];
foreach($third\u gen->children()作为$fourth\u gen){
“echo”和那个“$third_gen['role']。
“生一个”.$fourth_gen[“角色”];
}
}
}

尝试使用,您可能需要编辑它

<?
$xmlfile="test.xml";
$reader = new XMLReader();
$reader->open($xmlfile); 

while ($reader->read()) { 

        if($reader->nodeType == XMLReader::ELEMENT){
            echo "<br><b>Element:</b>".$reader->name;
        }
        if($reader->nodeType == XMLReader::TEXT){
            echo "   <b>Text:</b>".$reader->value;
        }
        if($reader->hasAttributes){
            $reader->moveToNextAttribute();
            echo "   <b>Attribute:</b>".$reader->name." <b>value:</b>".$reader->value;
            $reader->read();
            $reader->read();
        }

}

?>
open($xmlfile);
而($reader->read()){
if($reader->nodeType==XMLReader::ELEMENT){
echo“
元素:”.$reader->name; } 如果($reader->nodeType==XMLReader::TEXT){ 回显“文本:”.$reader->value; } 如果($reader->hasAttributes){ $reader->moveToNextAttribute(); echo“属性:”.$reader->name。“值:”.$reader->value; $reader->read(); $reader->read(); } } ?>
使用

在SimpleXMLElement对象的所有节点上提供递归迭代

例子
$xml = <<< XML
<node id="l-1">
    <node id="l-1-1">
        <node id="l-1-1-1">
            <node id="l-1-1-1-1"/>
        </node>
    </node>
    <node id="l-1-2">
        <node id="l-1-2-1">
            <node id="l-1-2-1-1"/>
            <node id="l-1-2-1-2"/>
        </node>
    </node>
</node>
XML;

$xmlIterator = new RecursiveIteratorIterator(
    new SimpleXMLIterator($xml),
    RecursiveIteratorIterator::SELF_FIRST
);

foreach ($xmlIterator as $nodeName => $node) {
    echo $nodeName, $node['id'], PHP_EOL;
}
nodel-1-1
nodel-1-1-1
nodel-1-1-1-1
nodel-1-2
nodel-1-2-1
nodel-1-2-1-1
nodel-1-2-1-2