当标记中的项目数始终在变化时,如何获取xml文件的item属性

时间:2012-12-11 14:52:32

标签: php xml xml-parsing feeds

我在下面有一些xml代码,我试图获得结果标记中所有“结果值”属性的值。事情是......这将是一个实时馈送,因此该标签中可能有1,2或3个结果项。

我是否需要进行某种计数以查看结果标记中有多少项?

<Match ct="0" id="771597" LastPeriod="2 HF" LeagueCode="19984" LeagueSort="1" LeagueType="LEAGUE" startTime="15:00" status="2 HF" statustype="live" type="2" visible="1">
    <Home id="11676" name="Manchester City" standing="1"/>
    <Away id="10826" name="Newcastle United" standing="3"/>
    <Results>
        <Result id="1" name="CURRENT" value="1-1"/>
        <Result id="2" name="FT" value="1-1"/>
        <Result id="3" name="HT" value="1-0"/>
    </Results>
    <Information>
        <league id="19984">Premier League</league>
        <note/>
        <bitarray/>
        <timestamp/>
    </Information>
</Match>

提前致谢

1 个答案:

答案 0 :(得分:1)

的SimpleXML

只需使用SimpleXML循环搜索结果,即可获取每个valuename属性,这将使用可变数量的结果。

<强> Demo

$obj = simplexml_load_string($xml);

foreach($obj->Results->Result as $result)
{
    echo $result->attributes()->name . ': ' . $result->attributes()->value . "\n";
}

<强>输出

  

当前:1-1
  FT:1-1
  HT:1-0

如果您的根节点如Matches下有多个Match,那么您可以使用嵌套的foreach,如下所示:

foreach($obj->Match as $match)
{
    foreach($match->Results->Result as $result)
    {
        echo $result->attributes()->name . ': ' . $result->attributes()->value . "\n";
    }
}

DOM文档

使用DOMDocument代替SimpleXML执行相同操作:

$dom = new DOMDocument();
$dom->loadXML($xml);

foreach($dom->getElementsByTagName('Match') as $match)
{
    foreach($match->getElementsByTagName('Result') as $result)
    {
        echo $result->getAttribute('name') . ': ' . $result->getAttribute('value') . "\n";
    }
}

输出与SimpleXML方法相同。