在我的PHP网站中我想读取这样的xml文件:
<?xml version="1.0" standalone="yes"?>
<RETURNDATA lang="it-IT" type="COR" xsi:noNamespaceSchemaLocation="http://xmlv5test.travco.co.uk/trlink/schema/CountryRequestV6Rcv.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<MESSAGE>All Countries details and relevant city details</MESSAGE>
<DATA COUNTRY_CODE="ABW" CURRENCY_CODE="EUR">
<COUNTRY_NAME>Aruba</COUNTRY_NAME>
<CURRENCY_NAME>euro</CURRENCY_NAME>
<COUNTRY_CITIES>
<CITY_DATA CITY_CODE="AUA">
<CITY_NAME>Aruba</CITY_NAME>
</CITY_DATA>
</COUNTRY_CITIES>
</DATA>
<DATA COUNTRY_CODE="ALB" CURRENCY_CODE="EUR">
<COUNTRY_NAME>Albania</COUNTRY_NAME>
<CURRENCY_NAME>euro</CURRENCY_NAME>
<COUNTRY_CITIES>
<CITY_DATA CITY_CODE="TIA">
<CITY_NAME>Tirana</CITY_NAME>
</CITY_DATA>
</COUNTRY_CITIES>
</DATA>
<DATA COUNTRY_CODE="ARE" CURRENCY_CODE="EUR">
<COUNTRY_NAME>Emirati Arabi Uniti</COUNTRY_NAME>
<CURRENCY_NAME>euro</CURRENCY_NAME>
<COUNTRY_CITIES>
<CITY_DATA CITY_CODE="DXB">
<CITY_NAME>Dubai</CITY_NAME>
</CITY_DATA>
<CITY_DATA CITY_CODE="AAI">
<CITY_NAME>Al Ain</CITY_NAME>
</CITY_DATA>
<CITY_DATA CITY_CODE="FJR">
<CITY_NAME>Fujaira</CITY_NAME>
</CITY_DATA>
<CITY_DATA CITY_CODE="SSH">
<CITY_NAME>Sharja</CITY_NAME>
</CITY_DATA>
<CITY_DATA CITY_CODE="RKT">
<CITY_NAME>Ras al-Khaimah</CITY_NAME>
</CITY_DATA>
<CITY_DATA CITY_CODE="AUH">
<CITY_NAME>Abu Dhabi</CITY_NAME>
</CITY_DATA>
</COUNTRY_CITIES>
</DATA>
</RETURNDATA>
我想输入每个节点名称DATA并采取:
COUNTRY_CODE
CURRENCY_CODE
COUNTRY_NAME
CURRENCY_NAME
所有国家城市都将代码和名称编码为一个数组关联。
我尝试使用SimpleXML,但XML是动态的,我想优化我的循环,因为我可以拥有一个非常大而且大的XML(这只是它的一小部分)。
$xml_str = file_get_contents('xml/country.xml');
$xml = new SimpleXMLElement($xml_str);
echo $xml->getName(), PHP_EOL;
foreach($xml as $name => $part) {
echo "$name: $part", PHP_EOL;
}
我想创建一个非常otpimize循环来获取我的值
答案 0 :(得分:2)
使用以下样式仅访问根元素中的<DATA>
子元素:
foreach ($xml->DATA as $name => $part) {
另外请检查SimpleXML Introduction它应该有一些很好的例子,为您展示如何使用SimpleXML进行基本操作的不同方法。文档非常好。
答案 1 :(得分:1)
你可以直接使用XML解析器,这很可能是最有效的方式
set_time_limit(0);
define('__BUFFER_SIZE__', 131072);
define('__XML_FILE__', 'pf_1360591.xml');
function elementStart($p, $n, $a) {
//handle opening of elements
}
function elementEnd($p, $n) {
//handle closing of elements
}
function elementData($p, $d) {
//handle cdata in elements
}
$xml = xml_parser_create();
xml_parser_set_option($xml, XML_OPTION_TARGET_ENCODING, 'UTF-8');
xml_parser_set_option($xml, XML_OPTION_CASE_FOLDING, 0);
xml_parser_set_option($xml, XML_OPTION_SKIP_WHITE, 1);
xml_set_element_handler($xml, 'elementStart', 'elementEnd');
xml_set_character_data_handler($xml, 'elementData');
$f = fopen(__XML_FILE__, 'r');
if($f) {
while(!feof($f)) {
$content = fread($f, __BUFFER_SIZE__);
xml_parse($xml, $content, feof($f));
unset($content);
}
fclose($f);
}