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