使用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