1
可能重複:
Get root node of XML doc using simplexmlSimpleXML - 如何獲取根對象名稱?
問題:我就通過XML解析的SimpleXML一些問題。我仍然沒有完全解決它。
- 我的根元素(config_admin)在哪裏?或者我如何得到它的名字?
- 爲什麼config_data數組嵌套?即使我替換類中的config_data文件,我也會得到相同的結果。
- 訪問我的元素的最佳方式是什麼?
- 我的文檔類型/元素定義有什麼問題?
我知道這是壞的習慣在一個線程中詢問3個問題,但我不想打擾那些重複的代碼示例。
我想花費我的知識,所以每一個答案是值得歡迎的。即使涉及到代碼樣式或其他。謝謝。
我有類似下面的xml文件:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE config_admin [
<!ELEMENT config_admin (page,sub_page)>
<!ELEMENT page (page_title,slug,menu_title)>
<!ELEMENT page_title (#PCDATA)>
<!ELEMENT slug (#PCDATA)>
<!ELEMENT menu_title (#PCDATA)>
]>
<config_admin>
<!--
MAIN Page
-->
<page>
<page_title>OOO</page_title>
<slug>ooo</slug>
<menu_title>OOO</menu_title>
<cap>manage_options</cap>
<icon_url>OOO</icon_url>
<position>OOO</position>
<tabs>
<abc_uid>abc</abc_uid>
<def_uid>def</def_uid>
<ghi_uid>ghi</ghi_uid>
</tabs>
<!-- Options for the main page -->
<opt_group>
<group_name>OOO</group_name>
<opt_name>OOO</opt_name>
<tab>ABC</tab>
<!-- Section -->
<section>
<section_title>OOO</section_title>
<section_UID>OOO</section_UID>
<!-- Defaults -->
<field_defaults>
<field_uid>Value</field_uid>
<_oxoxoxo>OXO</_oxoxoxo>
<_axaxaxa>AXA</_axaxaxa>
<_cxcxcxc>CXC</_cxcxcxc>
</field_defaults>
... etc.
...並通過使用一類不不外乎以下幾種分析它:
$data = new myXmlParser($require_files_path.$file);
$data = (array) $data;
$config_data[] = $data;
echo '<pre>OUTPUT: <br />';
echo '===================================================================== <br />';
foreach ($config_data as $key => $value) :
print_r($value);
echo '<br />';
endforeach;
echo '</pre>';
// The Class i use to parse
if (!class_exists('myXmlParser')) {
class myXmlParser {
public $file;
public $config_data;
public function __construct($file) {
$this->file = $file;
$this->config_data = simplexml_load_file($this->file);
$this->config_data = $this->recursive_parse($this->config_data);
}
private function recursive_parse($data) {
$output = array();
if (is_object($data)){
settype($data, 'array');
}
foreach ($data as $key => $value){
if ($key == 'comment')
unset($key);
if ($key && $value) :
if (is_array($value) || is_object($value)) {
$output[$key] = $this->recursive_parse($value);
}
else {
$output[$key] = (string) $value;
}
endif;
}
return $output;
}
}
}
然而,輸出如下:
OUTPUT:
=====================================================================
Array
(
[file] => R:\development\xampp\htdocs\wordpress\wp-content\themes\child_test/config_admin.xml
[config_data] => Array
(
[page] => Array
(
[page_title] => OXO
[slug] => oxo
[menu_title] => OXO
[cap] => manage_options
[icon_url] => OXO
[position] => OXO
[tabs] => Array
(
[abc_uid] => abc
它可以被訪問:$ attributes = current($ docs-> attributes() - > {'NAME'}) – 2013-12-23 07:36:55