6

我在这里有以下 xml 文档:编辑:(请参阅下面的示例)

我正在使用 php/SimpleXML 将其转换为要读取的对象:

$xmlContent = file_get_contents($path . '/test.xml');
$tablesRaw = new SimpleXMLElement($xmlContent);
echo '<pre>';
print_r($tablesRaw);
echo '</pre>';

当我 print_r 看到字段的属性但不显示可接受值的属性时。这是原始 xml 的示例(我需要 value 属性):

<acceptable-value value="0">
    Unknown
</acceptable-value>

这是我在 print_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>
4

2 回答 2

9

这里的简单答案是不要print_r()与 SimpleXML 对象一起使用。因为它们是非 PHP 数据的包装器,所以通常会显示“整个”对象的函数并不能真正反映您正在查看的内容。

使用 SimpleXML 访问属性的方法是使用属性名称,就好像它是一个数组键 ( $node['attribute']);这并不意味着在某个地方有一个带有该键的数组,它是变相的函数调用。

如果您想了解在编写 SimpleXML 代码时正在查看哪些节点,请查看我编写的这个simplexml_dump()函数(欢迎提供反馈)。

于 2012-09-15T12:30:12.970 回答
0

首先,您必须获取 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”的属性。

于 2012-09-15T04:29:07.633 回答