我有一个如下所示的XML文件:
<rss>
<channel>
<title>title</title>
<link>link</link>
<description>description</description>
<item>
<title>title 1</title>
<sort>1</sort>
</item>
<label>
<title>LABEL 1</title>
<sort>2</sort>
</label>
<item>
<title>title 2</title>
<sort>3</sort>
</item>
<label>
<title>LABEL 2</title>
<sort>4</sort>
</label>
<item>
<title>title 3</title>
<sort>5</sort>
</item>
<template>3</template>
</channel>
</rss>
我正在使用SimpleXML,我需要在'item'和'label'节点的组合列表上做一个foreach,忽略其余的'channel'子节点。
我正在使用:
foreach($feed->channel->item as $item) { }
...并将标签添加为:
<item type="label">
<title>LABEL 1</title>
</item>
...但我正在构建的文件的使用者期望标签的节点。
<小时/>
更新<!/强>
由于这个问题没有发布(需要一个标题!)而且我在此期间找到了自己的答案,这就是我所做的:
/* Search for items and labels */
$result = $iFeed->xpath('channel/*[name()="item" or name()="label"]');
foreach($result as $item) {
// boom
}
答案 0 :(得分:2)
我认为您也可以使用|
运算符。这结合了多个XPath查询的结果。
$result = $root->xpath('channel/item|channel/label');
看起来它也保留了节点的顺序,因此节点按以下顺序返回:“item,label,item,label,item”(与“item,item,item,label,label”相对) )。