SimpleXML - 按元素属性值分组
SimpleXML - Group By Element Attribute value
我又卡住了
我正在尝试根据属性 'name' 值
对 xml 数据进行分组
XML 供稿 Return 数据
<Sport sport_code="FOOT" name="Football" disporder="-1000">
<SBClass sb_class_id="12430" disporder="-999" name="France">
<SBType sb_type_id="26463" name="France - Coupe de France" disporder="52">
<Ev inplay_allowed="Y" status="A" name="Gazélec Fco Ajaccio v Sainte Marienne" start_time="2016-01-02T12:30:00" virtual="N" ev_timezone="Europe/London" inplay_now="Y" mkt_count="37" ev_id="3400770" disporder="-9996">
<EvDetail br_match_id="8548770"/>
<Inplay inplay_period_num="1" clock_status="TICKING" correct_at="2016-01-02T12:50:11" inplay_period="first_half" score_string="0-0" last_change="2016-01-01T09:45:07" inplay_secs="1209"/>
<Teams>
<Team team_id="3411" team_order="0" name="Gazélec Fco Ajaccio" short_name="Gazélec Fco Ajaccio"/>
<Team team_id="172231" team_order="1" name="Sainte Marienne" short_name="Sainte Marienne"/>
</Teams>
</Ev>
</SBType>
</SBClass>
<SBClass sb_class_id="12430" disporder="-999" name="UK">
<SBType sb_type_id="26463" name="France - Coupe de France" disporder="52">
<Ev inplay_allowed="Y" status="A" name="Gazélec Fco Ajaccio v Sainte Marienne" start_time="2016-01-02T12:30:00" virtual="N" ev_timezone="Europe/London" inplay_now="Y" mkt_count="37" ev_id="3400770" disporder="-9996">
<EvDetail br_match_id="8548770"/>
<Inplay inplay_period_num="1" clock_status="TICKING" correct_at="2016-01-02T12:50:11" inplay_period="first_half" score_string="0-0" last_change="2016-01-01T09:45:07" inplay_secs="1209"/>
<Teams>
<Team team_id="3411" team_order="0" name="Gazélec Fco Ajaccio" short_name="Gazélec Fco Ajaccio"/>
<Team team_id="172231" team_order="1" name="Sainte Marienne" short_name="Sainte Marienne"/>
</Teams>
</Ev>
</SBType>
</SBClass>
</Sport>
我希望它根据 SBClass 属性 'name' 值对所有数据进行分组
例如法国、英国(这个值是动态的,所以不能添加固定的字符串值)
我真的很挣扎。已经尝试过其他示例,但它们仅在要分组的数据位于节点内时才有效,例如 <node>DATA</node>
希望有人能帮忙解决这个问题
** 编辑 **
我已经尝试了 S.O 上的大部分分组建议。
$xmlData = 'http://feeds-sports.winner.com/odds_feed?key=get_events_for_sport&sport_code=FOOT&on_date=2016-01-02';
$xml = simplexml_load_file($xmlData);
$leagues = $xml->xpath('/Sport/SBClass[@name="United Kingdom"]');
var_dump($leagues); // var_dump #1
它甚至没有倾倒任何东西
我希望它像这样显示数据
类别:法国(或 SBClass 属性 'name' 中的相关值)
SBType 名称值:例如 France - Coupe de France
Ev 名称值:例如 Gazélec Fco Ajaccio v Sainte Marienne
然后显示 "France"
的所有数据
然后是类别的所有数据:英国
等等
** 第二次编辑 **
这是显示所有数据的 XML 提要
http://feeds-sports.winner.com/odds_feed?key=get_match_markets_for_sport&lang=en&sb_class_id=12430&sport_code=FOOT&mkt_sort=MRES
我想按SBType->attributes()->{'name'}
的值来分组
您可以做的是循环 $xml->Sport->SBClass
节点并检查名称属性是否存在。
如果名称属性存在,您可以将项目添加到数组(例如$sbClassGroups
)并使用名称属性为组(法国、西班牙等)创建数组键。)
现在您已经有了分组的数据,您可以循环这个 $sbClassGroups
数组,例如使用 foreach
构造从类型为 SimpleXMLElement 的元素中获取值。
$xmlData = 'http://feeds-sports.winner.com/odds_feed?key=get_events_for_sport&sport_code=FOOT&on_date=2016-01-02';
$xml = simplexml_load_file($xmlData);
$sbClassGroups = array();
foreach ($xml->Sport->SBClass as $item) {
if (isset($item->attributes()->name)) {
$sbClassGroups[(string)$item->attributes()->name][] = $item;
}
}
foreach ($sbClassGroups as $sbClassGroup) {
foreach( $sbClassGroup as $sbClass) {
echo "<br><b>" . $sbClass->attributes()->name . "</b><br>";
foreach ($sbClass->SBType as $sbt) {
echo "<br>" . $sbt->attributes()->name . "<br>";
foreach ($sbt->Ev as $ev) {
echo "<i>" . $ev->attributes()->name . "</i><br>";
}
}
}
}
我又卡住了 我正在尝试根据属性 'name' 值
对 xml 数据进行分组XML 供稿 Return 数据
<Sport sport_code="FOOT" name="Football" disporder="-1000">
<SBClass sb_class_id="12430" disporder="-999" name="France">
<SBType sb_type_id="26463" name="France - Coupe de France" disporder="52">
<Ev inplay_allowed="Y" status="A" name="Gazélec Fco Ajaccio v Sainte Marienne" start_time="2016-01-02T12:30:00" virtual="N" ev_timezone="Europe/London" inplay_now="Y" mkt_count="37" ev_id="3400770" disporder="-9996">
<EvDetail br_match_id="8548770"/>
<Inplay inplay_period_num="1" clock_status="TICKING" correct_at="2016-01-02T12:50:11" inplay_period="first_half" score_string="0-0" last_change="2016-01-01T09:45:07" inplay_secs="1209"/>
<Teams>
<Team team_id="3411" team_order="0" name="Gazélec Fco Ajaccio" short_name="Gazélec Fco Ajaccio"/>
<Team team_id="172231" team_order="1" name="Sainte Marienne" short_name="Sainte Marienne"/>
</Teams>
</Ev>
</SBType>
</SBClass>
<SBClass sb_class_id="12430" disporder="-999" name="UK">
<SBType sb_type_id="26463" name="France - Coupe de France" disporder="52">
<Ev inplay_allowed="Y" status="A" name="Gazélec Fco Ajaccio v Sainte Marienne" start_time="2016-01-02T12:30:00" virtual="N" ev_timezone="Europe/London" inplay_now="Y" mkt_count="37" ev_id="3400770" disporder="-9996">
<EvDetail br_match_id="8548770"/>
<Inplay inplay_period_num="1" clock_status="TICKING" correct_at="2016-01-02T12:50:11" inplay_period="first_half" score_string="0-0" last_change="2016-01-01T09:45:07" inplay_secs="1209"/>
<Teams>
<Team team_id="3411" team_order="0" name="Gazélec Fco Ajaccio" short_name="Gazélec Fco Ajaccio"/>
<Team team_id="172231" team_order="1" name="Sainte Marienne" short_name="Sainte Marienne"/>
</Teams>
</Ev>
</SBType>
</SBClass>
</Sport>
我希望它根据 SBClass 属性 'name' 值对所有数据进行分组 例如法国、英国(这个值是动态的,所以不能添加固定的字符串值)
我真的很挣扎。已经尝试过其他示例,但它们仅在要分组的数据位于节点内时才有效,例如 <node>DATA</node>
希望有人能帮忙解决这个问题
** 编辑 **
我已经尝试了 S.O 上的大部分分组建议。
$xmlData = 'http://feeds-sports.winner.com/odds_feed?key=get_events_for_sport&sport_code=FOOT&on_date=2016-01-02';
$xml = simplexml_load_file($xmlData);
$leagues = $xml->xpath('/Sport/SBClass[@name="United Kingdom"]');
var_dump($leagues); // var_dump #1
它甚至没有倾倒任何东西
我希望它像这样显示数据 类别:法国(或 SBClass 属性 'name' 中的相关值) SBType 名称值:例如 France - Coupe de France Ev 名称值:例如 Gazélec Fco Ajaccio v Sainte Marienne
然后显示 "France"
的所有数据然后是类别的所有数据:英国 等等
** 第二次编辑 ** 这是显示所有数据的 XML 提要 http://feeds-sports.winner.com/odds_feed?key=get_match_markets_for_sport&lang=en&sb_class_id=12430&sport_code=FOOT&mkt_sort=MRES
我想按SBType->attributes()->{'name'}
的值来分组您可以做的是循环 $xml->Sport->SBClass
节点并检查名称属性是否存在。
如果名称属性存在,您可以将项目添加到数组(例如$sbClassGroups
)并使用名称属性为组(法国、西班牙等)创建数组键。)
现在您已经有了分组的数据,您可以循环这个 $sbClassGroups
数组,例如使用 foreach
构造从类型为 SimpleXMLElement 的元素中获取值。
$xmlData = 'http://feeds-sports.winner.com/odds_feed?key=get_events_for_sport&sport_code=FOOT&on_date=2016-01-02';
$xml = simplexml_load_file($xmlData);
$sbClassGroups = array();
foreach ($xml->Sport->SBClass as $item) {
if (isset($item->attributes()->name)) {
$sbClassGroups[(string)$item->attributes()->name][] = $item;
}
}
foreach ($sbClassGroups as $sbClassGroup) {
foreach( $sbClassGroup as $sbClass) {
echo "<br><b>" . $sbClass->attributes()->name . "</b><br>";
foreach ($sbClass->SBType as $sbt) {
echo "<br>" . $sbt->attributes()->name . "<br>";
foreach ($sbt->Ev as $ev) {
echo "<i>" . $ev->attributes()->name . "</i><br>";
}
}
}
}