我目前正在做這個建立一個名爲$tables
的數組,但想知道是否有更簡單的方法來做到這一點?XPath一次選擇多個元素?
$tables = array();
$abbr = $states_xml->xpath('//StateAbbr');
$names = $states_xml->xpath('//StateName');
// State Abbreviations...
while(list($key,$table) = each($abbr)) {
$tables[$key]['Abbr'] = (string) trim($table);
}
// State Names...
while(list($key,$name) = each($names)) {
$tables[$key]['Name'] = (string) trim($name);
}
是否有可能調用1個去StateAbbr
和StateName
元件並具有它們在陣列中輸出在相同的格式$tables
是?
<diffgr:diffgram
xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"
xmlns:diffgr="urn:schemas-microsoft-com:xml-diffgram-v1">
<NewDataSet
xmlns="">
<Table diffgr:id="Table1" msdata:rowOrder="0">
<StateAbbr>AL </StateAbbr>
<StateName>Alabama</StateName>
</Table>
<Table diffgr:id="Table2" msdata:rowOrder="1">
<StateAbbr>AK </StateAbbr>
<StateName>Alaska</StateName>
</Table>
<Table diffgr:id="Table3" msdata:rowOrder="2">
<StateAbbr>AS </StateAbbr>
<StateName>American Samoa</StateName>
</Table>
<Table diffgr:id="Table4" msdata:rowOrder="3">
<StateAbbr>AP </StateAbbr>
<StateName>AP</StateName>
</Table>
...
</NewDataSet>
</diffgr:diffgram>
我使用$states_xml = simplexml_load_string(THE STRING ABOVE);
將XML加載到$states_xml
:
因此,表數組將是這個樣子:
array(57) {
[0]=>
array(2) {
["Abbr"]=>
string(2) "AL"
["Name"]=>
string(7) "Alabama"
}
[1]=>
array(2) {
["Abbr"]=>
string(2) "AK"
["Name"]=>
string(6) "Alaska"
}
[2]=>
array(2) {
["Abbr"]=>
string(2) "AS"
["Name"]=>
string(14) "American Samoa"
}
... and so on...
基本上,$states_xml
看起來是這樣的。
無論如何要抓取所有的StateAbbr
和StateName
這裏要輸出的所有Table
元素,一氣呵成?似乎對我可能,但不知道如何處理這個比我目前正在做的方式。
不,這不起作用。我更新了輸出xml字符串的問題。 –
嗯,它確實按照它的設計要做:使用單個XPath選擇所有'StateAbbr'和'StateName'元素。如果你真的想保留'StateAbbr'和'StateName'元素之間的關聯,那你爲什麼不選擇所有的表?例如:'// Table' – kjhughes
因爲//表格返回的信息太多,無法輕鬆解析。在任何情況下,我決定拋棄'xpath'方法,只是簡單地執行一個'$ states = json_decode(json_encode($ states_xml),true);'然後再簡單地調用'$ states ['' NewDataSet'] ['Table']',它給了我我需要的東西。感謝您的幫助。 :) –