我需要編寫一個函數來從XML文件中獲取數據。編寫一個函數來解析來自XML文件的數據
這是我第一次嘗試做這樣的事情。我想對待它,就像我會對待一個MySQL數據庫(是的,我是一個新手)。
的XML的結構如下所示:
$xmlstr = <<<XML
<?xml version='1.0' standalone='yes'?>
<PlayerCount value="2">
<Position value="Left">
<Action value="Hit">
<Range BBIdx="2" model="Math">0.653</Range>
<Range BBIdx="3" model="Math">0.341</Range>
<Range BBIdx="4" model="Math">0.216</Range>
</Action>
<Action value="Punch">
<Range BBIdx="0" model="Math">1.000</Range>
<Range BBIdx="1" model="Math">1.000</Range>
<Range BBIdx="2" model="Math">0.498</Range>
<Range BBIdx="3" model="Math">0.256</Range>
<Range BBIdx="4" model="Math">0.168</Range>
</Action>
<Action value="Defend">
<Range BBIdx="1" model="Math">1.000</Range>
<Range BBIdx="2" model="Math">1.000</Range>
<Range BBIdx="3" model="Math">0.503</Range>
<Range BBIdx="4" model="Math">0.341</Range>
</Action>
</Position>
<Position value="Right">
<Action value="Hit">
<Range BBIdx="2" model="Math">0.828</Range>
<Range BBIdx="3" model="Math">0.416</Range>
<Range BBIdx="4" model="Math">0.278</Range>
</Action>
<Action value="Punch">
<Range BBIdx="1" model="Math">1.000</Range>
<Range BBIdx="2" model="Math">0.623</Range>
<Range BBIdx="3" model="Math">0.309</Range>
<Range BBIdx="4" model="Math">0.217</Range>
</Action>
<Action value="HitDefend">
<Range BBIdx="2" model="Math">0.628</Range>
<Range BBIdx="3" model="Math">0.313</Range>
<Range BBIdx="4" model="Math">0.204</Range>
</Action>
<Action value="PunchDefend">
<Range BBIdx="1" model="Math">0.755</Range>
<Range BBIdx="2" model="Math">0.380</Range>
<Range BBIdx="3" model="Math">0.192</Range>
<Range BBIdx="4" model="Math">0.127</Range>
</Action>
</Position>
</PlayerCount>
<PlayerCount value="3">
<Position value="Up">
<Action value="Hit">
<Range BBIdx="2" model="Math">0.455</Range>
<Range BBIdx="3" model="Math">0.237</Range>
<Range BBIdx="4" model="Math">0.158</Range>
</Action>
<Action value="Punch">
<Range BBIdx="0" model="Math">0.931</Range>
<Range BBIdx="1" model="Math">0.702</Range>
<Range BBIdx="2" model="Math">0.372</Range>
<Range BBIdx="3" model="Math">0.178</Range>
<Range BBIdx="4" model="Math">0.117</Range>
</Action>
<Action value="Defend">
<Range BBIdx="1" model="Math">1.000</Range>
<Range BBIdx="2" model="Math">0.725</Range>
<Range BBIdx="3" model="Math">0.352</Range>
<Range BBIdx="4" model="Math">0.235</Range>
</Action>
</Position>
<Position value="Left">
<Action value="Hit">
<Range BBIdx="2" model="Math">0.576</Range>
<Range BBIdx="3" model="Math">0.273</Range>
<Range BBIdx="4" model="Math">0.189</Range>
</Action>
<Action value="Punch">
<Range BBIdx="0" model="Math">1.000</Range>
<Range BBIdx="1" model="Math">0.862</Range>
<Range BBIdx="2" model="Math">0.434</Range>
<Range BBIdx="3" model="Math">0.209</Range>
<Range BBIdx="4" model="Math">0.150</Range>
</Action>
<Action value="Defend">
<Range BBIdx="1" model="Math">1.000</Range>
<Range BBIdx="2" model="Math">0.844</Range>
<Range BBIdx="3" model="Math">0.439</Range>
<Range BBIdx="4" model="Math">0.291</Range>
</Action>
<Action value="HitDefend">
<Range BBIdx="2" model="Math">0.429</Range>
<Range BBIdx="3" model="Math">0.212</Range>
<Range BBIdx="4" model="Math">0.142</Range>
</Action>
<Action value="PunchDefend">
<Range BBIdx="0" model="Math">0.693</Range>
<Range BBIdx="1" model="Math">0.530</Range>
<Range BBIdx="2" model="Math">0.269</Range>
<Range BBIdx="3" model="Math">0.133</Range>
...
<PlayerCount value="3">
...
我希望能夠在<Range>
標籤之間可以方便地訪問數字。
喜歡的東西拿到這裏
<PlayerCount value="2">
<Position value="Left">
<Action value="Hit">
<Range BBIdx="2" model="Math">
如果這將是我的MySQL會做一些這樣的數字:
$query = "SELECT range FROM modeling WHERE BB='' AND POS='' AND OPP='";
任何幫助是非常欣賞。我已經浪費了2天的時間來看SimpleXML PHP類,但我不知道如何在屬性中搜索,就像在這種情況下一樣。我相信,解決這個問題不會超過2分鐘。
如果我有getnumber('file-xml','playercount','position','action','bbidx')這樣的函數,
在此先感謝。
這是我寫的代碼,但我不知道如何使它與屬性工作:
$xml = new SimpleXMLElement($input);
$res = $xml->xpath('/Playercount[.=2]/Position[.=Left]/Action[.=Hit]/Range[.=2]');
while(list(, $node) = each($result)) {
echo 'result: ',$node,"\n";
}
不幸的是預期,這並不工作。
這是我想現在使用的代碼:
<?php
$x = <<<XML
<?xml version='1.0' standalone='yes'?>
<document>
<PlayerCount value="2">
<Position value="Left">
<Action value="Hit">
<Range BBIdx="2" model="Math">0.653</Range>
<Range BBIdx="3" model="Math">0.341</Range>
<Range BBIdx="4" model="Math">0.216</Range>
</Action>
<Action value="Punch">
<Range BBIdx="0" model="Math">1.000</Range>
<Range BBIdx="1" model="Math">1.000</Range>
<Range BBIdx="2" model="Math">0.498</Range>
<Range BBIdx="3" model="Math">0.256</Range>
<Range BBIdx="4" model="Math">0.168</Range>
</Action>
<Action value="Defend">
<Range BBIdx="1" model="Math">1.000</Range>
<Range BBIdx="2" model="Math">1.000</Range>
<Range BBIdx="3" model="Math">0.503</Range>
<Range BBIdx="4" model="Math">0.341</Range>
</Action>
</Position>
<Position value="Right">
<Action value="Hit">
<Range BBIdx="2" model="Math">0.828</Range>
<Range BBIdx="3" model="Math">0.416</Range>
<Range BBIdx="4" model="Math">0.278</Range>
</Action>
<Action value="Punch">
<Range BBIdx="1" model="Math">1.000</Range>
<Range BBIdx="2" model="Math">0.623</Range>
<Range BBIdx="3" model="Math">0.309</Range>
<Range BBIdx="4" model="Math">0.217</Range>
</Action>
<Action value="HitDefend">
<Range BBIdx="2" model="Math">0.628</Range>
<Range BBIdx="3" model="Math">0.313</Range>
<Range BBIdx="4" model="Math">0.204</Range>
</Action>
<Action value="PunchDefend">
<Range BBIdx="1" model="Math">0.755</Range>
<Range BBIdx="2" model="Math">0.380</Range>
<Range BBIdx="3" model="Math">0.192</Range>
<Range BBIdx="4" model="Math">0.127</Range>
</Action>
</Position>
</PlayerCount>
</document>
XML;
$xml = simplexml_load_string($x);
//$result = (string)$xml->xpath("//PlayerCount[@value='2']/Position[@value='Left']/Action[@value='Hit']/Range[@BBIdx='2' and @model='Math']")[0];
list($result) = (string)$xml->xpath("//document/PlayerCount[@value='2']/Position[@value='Left']/Action[@value='Hit']/Range[@BBIdx='2' and @model='Math']");
var_dump($result);
?>
的var_dump返回NULL。怎麼來的?
你忘了添加你寫過這個問題的PHP代碼。 – andrewsi
[XPath](http://en.wikipedia.org/wiki/XPath)是你的朋友。 – moonwave99
我已經投票了你的評論。我將它添加到andrewsi中。 – KingBOB