PHP SimpleXML的属性丢失PHP SimpleXML的属性丢失(php SimpleXML

2019-05-12 09:37发布

我在这里有下面的XML文档:编辑:(见下面的示例)

我使用PHP / SimpleXML来它隐蔽的一个对象来阅读:

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

当我的print_r我看到字段属性,但可以接受的价值不显示属性。 这里是原始XML(我所需要的值属性)的示例:

<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>

Answer 1:

这里简单的答案是不使用print_r()用SimpleXML对象。 因为他们是围绕非PHP数据包装,这样的功能,这通常会显示“整”的对象并不真正反映你在看什么。

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

如果你想获得哪些节点你看而写的SimpleXML代码的感觉,看看这simplexml_dump()函数 ,我写了(欢迎反馈)。



Answer 2:

首先,你必须得到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获取名为“值”属性。



文章来源: php SimpleXML attributes are missing
标签: php simplexml