6
A
回答
16
嘗試用simple XML,這裏有一個例子:
do.php:
<?php
$xml_str = file_get_contents('xmlfile.xml');
$xml = new SimpleXMLElement($xml_str);
$items = $xml->xpath('*/item');
foreach($items as $item) {
echo $item['title'], ': ', $item['description'], "\n";
}
xmlfile.xml:
<?xml version="1.0" encoding="UTF-8"?>
<xml>
<items>
<item title="Hello World" description="Hellowing the world.." />
<item title="Hello People" description="greeting people.." />
</items>
</xml>
11
對於那些SimpleXML的是那些情況不可用,我使用此功能最初張貼在ph值的評論p.net。它在99%的時間內很好地工作。
<?php
/**
* Convert XML to an Array
*
* @param string $XML
* @return array
*/
function XMLtoArray($XML)
{
$xml_parser = xml_parser_create();
xml_parse_into_struct($xml_parser, $XML, $vals);
xml_parser_free($xml_parser);
// wyznaczamy tablice z powtarzajacymi sie tagami na tym samym poziomie
$_tmp='';
foreach ($vals as $xml_elem) {
$x_tag=$xml_elem['tag'];
$x_level=$xml_elem['level'];
$x_type=$xml_elem['type'];
if ($x_level!=1 && $x_type == 'close') {
if (isset($multi_key[$x_tag][$x_level]))
$multi_key[$x_tag][$x_level]=1;
else
$multi_key[$x_tag][$x_level]=0;
}
if ($x_level!=1 && $x_type == 'complete') {
if ($_tmp==$x_tag)
$multi_key[$x_tag][$x_level]=1;
$_tmp=$x_tag;
}
}
// jedziemy po tablicy
foreach ($vals as $xml_elem) {
$x_tag=$xml_elem['tag'];
$x_level=$xml_elem['level'];
$x_type=$xml_elem['type'];
if ($x_type == 'open')
$level[$x_level] = $x_tag;
$start_level = 1;
$php_stmt = '$xml_array';
if ($x_type=='close' && $x_level!=1)
$multi_key[$x_tag][$x_level]++;
while ($start_level < $x_level) {
$php_stmt .= '[$level['.$start_level.']]';
if (isset($multi_key[$level[$start_level]][$start_level]) && $multi_key[$level[$start_level]][$start_level])
$php_stmt .= '['.($multi_key[$level[$start_level]][$start_level]-1).']';
$start_level++;
}
$add='';
if (isset($multi_key[$x_tag][$x_level]) && $multi_key[$x_tag][$x_level] && ($x_type=='open' || $x_type=='complete')) {
if (!isset($multi_key2[$x_tag][$x_level]))
$multi_key2[$x_tag][$x_level]=0;
else
$multi_key2[$x_tag][$x_level]++;
$add='['.$multi_key2[$x_tag][$x_level].']';
}
if (isset($xml_elem['value']) && trim($xml_elem['value'])!='' && !array_key_exists('attributes', $xml_elem)) {
if ($x_type == 'open')
$php_stmt_main=$php_stmt.'[$x_type]'.$add.'[\'content\'] = $xml_elem[\'value\'];';
else
$php_stmt_main=$php_stmt.'[$x_tag]'.$add.' = $xml_elem[\'value\'];';
eval($php_stmt_main);
}
if (array_key_exists('attributes', $xml_elem)) {
if (isset($xml_elem['value'])) {
$php_stmt_main=$php_stmt.'[$x_tag]'.$add.'[\'content\'] = $xml_elem[\'value\'];';
eval($php_stmt_main);
}
foreach ($xml_elem['attributes'] as $key=>$value) {
$php_stmt_att=$php_stmt.'[$x_tag]'.$add.'[$key] = $value;';
eval($php_stmt_att);
}
}
}
return $xml_array;
}
?>
2
如果你熟悉Zend框架,通過你的XML Zend_Config_Xml中
給出這樣的XML
$myXml = '
<?xml version="1.0" ?>
<top>
<var>value</var>
<nested>
<var>value</var>
</nested>
<arrayVar>
<item>1</item>
<item>2</item>
<item>3</item>
</arrayVar>
</top>';
可正是如此訪問:
$xml = new Zend_Config_Xml($myXml);
$var = $xml->var;
$nestedVar = $xml->nested->var;
$arrayVar = $xml->arrayVar->toArray();
Zend Config XML使用simplexml,並在此基礎上提供一個不錯的界面,這使得它非常容易實現您正在查找的xml節點。
ZF手冊中有更多的負載,包括如何訪問屬性以及一些其他非常有用的功能。
http://framework.zend.com/manual/en/zend.config.adapters.xml.html
Zend的配置是最容易使用ZF的零部件之一,(我認爲)這是一個獨立的組件,你可以只使用Zend的配置和ZF
的任何其他部分相關問題
- 1. python解析xml字符串
- 2. 解析XML字符串.net
- 3. 解析:字符串到XML
- 4. xml從字符串解析
- 5. 解析XML字符串
- 6. 將XML字符串解析爲XML
- 7. PHP JSON字符串解析
- 8. PHP解析JSON字符串
- 9. PHP字符串解析
- 10. PHP - 解析字符串
- 11. 從xml解析字符串的數字
- 12. 解析解析字符串
- 13. 當解析XML字符串中「字的‘無法解析
- 14. 的Xml不解析字符串
- 15. Xml解析器 - 字符串::找到
- 16. 用Joox解析Xml字符串
- 17. 如何解析XML字符串
- 18. 使用jQuery從字符串解析XML
- 19. 解析xml字符串並獲取值
- 20. SAPUI5從字符串解析XML視圖
- 21. 解析XML屬性爲字符串
- 22. 從WebServer解析XML字符串
- 23. 解析XML字符串與C#
- 24. 解析MATLAB中的XML字符串
- 25. 如何解析分層XML字符串
- 26. 需要幫助解析XML字符串
- 27. 需要解析XML字符串
- 28. 解析java中的xml字符串?
- 29. 在VB.NET中解析XML字符串
- 30. 解析複雜的XML字符串(RXML)