这里有以下xml文档:编辑:(示例见下文)
我正在使用php/SimpleXML将其转换为一个对象来读取:
$xmlContent = file_get_contents($path . '/test.xml');
$tablesRaw = new SimpleXMLElement($xmlContent);
echo '<pre>';
print_r($tablesRaw);
echo '</pre>';
当我打印_r时,我看到字段的属性,但不显示可接受值的属性。下面是一个原始xml的示例(我需要value属性):
<acceptable-value value="0">
Unknown
</acceptable-value>
这是我打印时看到的_r:
[acceptable-values] => SimpleXMLElement Object
(
[acceptable-value] => Array
(
[0] =>
Unknown
[1] =>
Invalid
[2] =>
Deleted
[3] =>
Valid/Good
[4] =>
Inactive
)
)
有什么线索可以解释为什么这些属性没有显示出来?提前谢谢。
编辑:请求一些xml:
<field name="Address1Type" type="String"/>
<field name="Address2Street1" type="String"/>
<field name="Address2Street2" type="String"/>
<field name="Address2Type" type="String"/>
<field name="Address3Street1" type="String"/>
<field name="Status" type="Integer" access="R">
<acceptable-values>
<acceptable-value value="0">
Unknown
</acceptable-value>
<acceptable-value value="1">
Invalid
</acceptable-value>
<acceptable-value value="2">
Deleted
</acceptable-value>
<acceptable-value value="3">
Valid/Good
</acceptable-value>
<acceptable-value value="4">
Inactive
</acceptable-value>
</acceptable-values>
</field>
这里的简单答案是不要将print_r()
与SimpleXML对象一起使用。因为它们是非PHP数据的包装器,所以像这样通常会显示"整个"对象的函数并不能真正反映您所看到的内容
使用SimpleXML访问属性的方法是将属性名称当作数组键($node['attribute']
)使用;这并不意味着某个地方有一个带有该键的数组,它是伪装的函数调用。
如果您想了解在编写SimpleXML代码时要查看的节点,请查看我编写的simplexml_dump()
函数(欢迎反馈)。
首先,您必须获得SimpleXMLElement对象。在这种情况下:
$xmlContent = file_get_contents($path . '/test.xml');
$tablesRaw = new SimpleXMLElement($xmlContent);
$elements = $tablesRaw->table[22]->fields->field[31]->{'acceptable-values'}->children();
现在,您可以对每个acceptable-value
对象进行迭代,并使用attributes()
方法:
foreach($elements as $element) {
echo $element->attributes()->value . " ";
echo trim($element[0]) . "'n";
}
使用XML,将打印:
0 Unknown
1 Invalid
2 Deleted
3 Valid/Good
4 Inactive
它不依赖于数组索引,因为对attributes()
的调用获取元素的实际属性。并且->value
获得名称为"value"的属性。