【问题标题】:Access all children of a certain node with simplexml and php使用 simplexml 和 php 访问某个节点的所有子节点
【发布时间】:2013-04-17 07:46:30
【问题描述】:

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

我有一个如下外观的 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 访问特定项目。 (感谢这个精彩的 stackoverflow 社区 :))

但是我怎样才能只对某个项目使用 children() 函数呢?

像这样

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

非常感谢!

【问题讨论】:

  • 首先编写代码如何访问您希望孩子从中获取的 item 元素。将其存储在变量中。调用它的 children() 方法。正如你所写的,你知道第一部分是如何工作的,并且你知道 children() 方法,所以它基本上只是把这两个放在一起。
  • 但我可能不完全理解你的问题,也许能有所启发。你的意思是得到所有的后代?

标签: php xml simplexml children


【解决方案1】:

希望对你有帮助。

代码

$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

【讨论】:

  • 谢谢它工作正常!我知道这很简单,但我的大脑就是不想输出它。我之前使用 $id 变量生成路径并像这样调用它foreach ($xml-&gt;xpath($path) as $item)
  • 如果其他人需要它,这里还有如何访问属性节点的值:$path = '//item[@id="'.$id.'"]'; foreach ($xml-&gt;xpath($path) as $item) { foreach ($item-&gt;children() as $child) { foreach ($child-&gt;children() as $value) { echo $child['name'] ." = ".$value."&lt;br /&gt;"; } } }
【解决方案2】:

但是我怎样才能只对某个项目使用 children() 函数呢?

SimpleXMLElement::children()Docs 方法总是用于 Simplexml 中的某个元素。所以你可以通过使用它来做到这一点。

$element->children();

手工铸币是这样的:

查找给定节点的子节点

【讨论】:

    猜你喜欢
    • 2012-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-28
    • 1970-01-01
    • 2014-07-16
    相关资源
    最近更新 更多