像这样的Xml文件
<xml>
<Categories>
<OneSubcategory>
<Id>4</Id>
<CategoriesUrl>cars</CategoriesUrl>
<Id>5</Id>
<CategoriesUrl>staff-required</CategoriesUrl>
</OneSubcategory>
</Categories>
</xml>
希望获得<Id>
<CategoriesUrl>
cars
$xml = simplexml_load_file( filename.xml' );
值
现在我这样做
1)foreach($xml->children() as $subcategory){
if( trim($subcategory->OneSubcategory->CategoriesUrl) == 'cars' ){
$id = trim($subcategory->OneSubcategory->Id);
}
}
2)然后遍历所有文件
SELECT Id WHERE CategoriesUrl = 'cars'
是否可以在没有循环的情况下获取值,例如mysql $id = $xml->xpath('Categories/OneSubcategory/Id');
?
更新
基于此http://www.tuxradar.com/practicalphp/12/3/3#null
使用Id
获取所有$id = $xml->xpath('Categories/OneSubcategory/Id[CategoriesUrl="cars"]');
尝试$id = $xml->xpath('Categories/OneSubcategory[CategoriesUrl="cars"]/Id');
获取空数组
什么是错误的?
似乎这是一个解决方案
{{1}}
答案 0 :(得分:1)
查询似乎已关闭,因为CategoriesUrl
和Id
是兄弟姐妹。如果您不想循环,则只需将索引显式设置为零即可获得第一个值。
$query = "//Id[following-sibling::CategoriesUrl[text() = 'cars']]";
$nodes = $xml->xpath($query);
if(count($nodes) > 0) { // if found
// get one
$id = $nodes[0];
echo $id;
// if you want to loop
// foreach($nodes as $node) { // loop all results
// $id = (string) $node;
// echo $id;
// }
}
如果您希望找到所有结果,那么只需使用foreach。