使用simplexml和php访问某个节点的所有子节点

时间:2013-04-17 07:46:31

标签: php xml simplexml children

我有一个问题,答案肯定很简单,但它只是缺乏我的理解。

我有一个带有以下外观的xml文件(简短示例)

<item id="1234">
    <property name="country_id">
        <value>4402</value>
    </property>
    <property name="rc_maintenance_other">
    </property>
    <property name="claim_right_shareholder">
    </property>
    <property name="charges_other">
    </property>
    <property name="other_expenses_heating">
    </property>
    <property name="unpaid_bills_amount">
    </property>
    <property name="iv_person_phone">
        <value>03-6756711</value>
    </property>
</item>
<item id="9876">
   ...
</item>

我的问题是,我想从ID为1234的一个项目中读取所有属性及其属性及其值(如果存在)在数组中。

我知道如何使用xpath访问某个Item。 (感谢这个精彩的stackoverflow社区:))

但是如何才能将children()函数仅用于某个项?

喜欢这个

foreach ($item[id="1234"]->children() as $property) {

非常感谢你!

2 个答案:

答案 0 :(得分:4)

我希望这可以帮到你。

<强>代码

$xml = new SimpleXMLElement('<item id="1234">
    <property name="country_id">
        <value>4402</value>
    </property>
    <property name="rc_maintenance_other">
    </property>
    <property name="claim_right_shareholder">
    </property>
    <property name="charges_other">
    </property>
    <property name="other_expenses_heating">
    </property>
    <property name="unpaid_bills_amount">
    </property>
    <property name="iv_person_phone">
        <value>03-6756711</value>
    </property>
</item>');

foreach ($xml->xpath('//item[@id="1234"]') as $item)
{    
    foreach ($item->children() as $child) {
      echo $child['name'] ."\n";
    }
}

<强>输出

country_id
rc_maintenance_other
claim_right_shareholder
charges_other
other_expenses_heating
unpaid_bills_amount
iv_person_phone

示例:http://sandbox.onlinephpfunctions.com/code/4e0ddba2ed273ab4a20dc9379ea9ed0d669a4c0d

答案 1 :(得分:0)

  

但是如何才能将children()函数仅用于某个项?

<{3}}方法始终用于Simplexml中的某个元素。所以你可以通过使用它来做到这一点。

$element->children();

手册以这种方式硬币:

  

查找给定节点的子节点