我有Xml文件,例如
<response>
<tag1>
<item>
<id>106</id>
<title>DG</title>
</item>
<item>
<id>105</id>
<title>AC</title>
</item>
</tag1>
<tag2>
<item>
<id>1</id>
<title>DjG</title>
</item>
<item>
<id>15</id>
<title>AoC</title>
</item>
</tag2>
</response>
我尝试使用此代码提取ID和标题
$dom = new DomDocument();
$dom->load('xml.xml');
$xpath = new DOMXPath($dom);
foreach($xpath->evaluate('//response/*') as $node){
$params =$xpath->evaluate('//response/' .$node->nodeName . '/item/*');
foreach($params as $child) {
echo $node->nodeName ." = " .$child->nodeName ." = " .$child->nodeValue ."\n<br>";
}
}
但是我得到这样的结果
<br>tag1 = id = 106
<br>tag1 = title = DG
<br>tag1 = id = 105
<br>tag1 = title = AC
<br>tag2 = id = 1
<br>tag2 = title = DjG
<br>tag2 = id = 15
<br>tag2 = title = AoC
但是我需要这样
标签1 = 106 = DG
标签1 = 105 = AC
tag2 = 1 = DjG
tag2 = 15 = AoC
最佳答案
在第二个foreach
上,仅以该$node->nodeName
为目标,然后在内部的foreach目标上,每个ID都具有一个标题。
foreach($xpath->evaluate('//response/*') as $node) {
$tag = $node->nodeName;
$params = $xpath->evaluate("//$tag/*");
foreach($params as $child) {
$id = $xpath->evaluate('string(./id)', $child);
$title = $xpath->evaluate('string(./title)', $child);
echo $tag ." = " .$id ." = " .$title ."\n<br>";
}
}
Sample Output
或
SimpleXML
版本:$xml = simplexml_load_file('xml.xml');
foreach($xml as $tag =>$node) {
foreach($node as $item => $child) {
echo $tag ." = " .$child->id ." = " .$child->title ."\n<br>";
}
}
Sample Output
关于php - PHP通过Xml节点循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28065355/