我正在使用simplexml_load_string
加载XML字符串,如果该节点没有自己的任何子节点,那么该节点的属性似乎没有正确映射到数组。有没有办法解决?请参阅以下CUSTOM_PROPERTY
部分:
假设我有以下XML:
<WEBSITE NAME="www.example.co.uk">
<CATEGORY ID="35702" NAME="CatName" FILE_NAME="" LONG_DESC="" SHORT_DESC="">
<CUSTOM>
<CUSTOM_PROPERTY NAME="CATTYPE_INDEX">6</CUSTOM_PROPERTY>
<CUSTOM_PROPERTY NAME="TEMPLATE_ID">0</CUSTOM_PROPERTY>
<CUSTOM_PROPERTY NAME="DISPLAY_LIMIT">10</CUSTOM_PROPERTY>
<CUSTOM_PROPERTY NAME="HIDE_ON_MENU">0</CUSTOM_PROPERTY>
<CUSTOM_PROPERTY NAME="CAT_COLOUR">#01b2a8</CUSTOM_PROPERTY>
</CUSTOM>
</CATEGORY>
当我使用以下代码时:
$Xml = simplexml_load_string($Str);
print_r($Xml);
它返回:
SimpleXMLElement Object
(
[@attributes] => Array
(
[NAME] => www.example.co.uk
)
[CATEGORY] => Array
(
[0] => SimpleXMLElement Object
(
[@attributes] => Array
(
[ID] => 35702
[NAME] => CatName
[FILE_NAME] =>
[LONG_DESC] =>
[SHORT_DESC] =>
)
[CUSTOM] => SimpleXMLElement Object
(
[CUSTOM_PROPERTY] => Array
(
[0] => 6
[1] => 0
[2] => 10
[3] => 0
[4] => #01b2a8
)
)
)
)
)
CUSTOM_PROPERTY
应该映射一个属性NAME
但不会。
答案 0 :(得分:4)
您的属性存在但print_r()
未显示。请注意print_r()
不是查看整个SimpleXML结构的可靠方法。
示例:
<强> Demo 强>
$obj = simplexml_load_string($xml);
foreach($obj->CATEGORY->CUSTOM->CUSTOM_PROPERTY as $custom_property)
{
echo $custom_property->attributes()->NAME . "\n";
}
输出
CATTYPE_INDEX
TEMPLATE_ID
DISPLAY_LIMIT
HIDE_ON_MENU
CAT_COLOUR