在具有重复节点的文档中使用XPath与XMLReader和XMLReader-iterators.php
我在提取XML文件的某些部分时遇到问题 以XML为例:在具有重复节点的文档中使用XPath与XMLReader和XMLReader-iterators.php,php,xml,xpath,iterator,xmlreader,Php,Xml,Xpath,Iterator,Xmlreader,我在提取XML文件的某些部分时遇到问题 以XML为例: <toplevel> <profile> <technology type="java" /> <technology type="dotnet" /> <technology type="sdk" /> <technology type="webserver" /> <license interactive="false" />
<toplevel>
<profile>
<technology type="java" />
<technology type="dotnet" />
<technology type="sdk" />
<technology type="webserver" />
<license interactive="false" />
<groups></groups>
<sensors></sensors>
<measures>
<measure id="example-name1" userdefined="true"></measure>
<measure id="example-name2" userdefined="false"></measure>
</measures>
<transaction>
<value>
<measure id="example-name3" userdefined="true"></measure>
</value>
</transaction>
</profile>
</toplevel>
有人能帮我理解如何将结果缩小到“度量”部分中用户定义的度量吗?也许这可以通过XPath实现
谢谢大家!
编辑:
我已经整理出了用户定义的部分:
foreach ($measures as $measure) {
$userdefined = $measure->getAttribute('userdefined');
$measure_name = $measure->getAttribute('id');
if ($userdefined=="true") {
echo "$measure_name<br>";
$count++;
}
}
foreach($measures作为$measure){
$userdefined=$measure->getAttribute('userdefined');
$measure_name=$measure->getAttribute('id');
如果($userdefined==“true”){
echo“$measure_name
”;
$count++;
}
}
但我无法缩小迭代器的范围,仅从“度量”部分中获取度量。它仍然会出现在“事务”部分。这里不需要迭代器。您可以通过和来实现这一点 您可以选择如下简单的元素:
$xml = new SimpleXMLElement($xml);
$measures = $xml->xpath('//measures/measure[@userdefined="true"]');
然后,您可以循环选择的项目:
foreach ($measures as $measure) {
echo 'id: ', $measure['id'], PHP_EOL;
echo 'value: ', $measure, PHP_EOL;
echo PHP_EOL;
}
这是
foreach ($measures as $measure) {
echo 'id: ', $measure['id'], PHP_EOL;
echo 'value: ', $measure, PHP_EOL;
echo PHP_EOL;
}