gpt4 book ai didi

php - Xpath 并根据祖先的元素值有条件地选择后代

转载 作者:行者123 更新时间:2023-12-03 16:13:01 24 4
gpt4 key购买 nike

我希望有人能帮我解决这个问题。

我对 XML 解析相当陌生,所以 XML 解析到目前为止我只处理过相当简单的解析。

我目前遇到以下问题......

我有这种结构的 XML:-

    <members>
<member>
<name>David Smith</name>
<information>
<description>home telephone</description>
<given_information>
<details>0123465987</details>
</given_information>
</information>
<information>
<description>mobile telephone</description>
<given_information>
<details>056142856987</details>
</given_information>
</information>
<information>
<description>email address</description>
<given_information>
<details>d.smith@yahoo.com</details>
</given_information>
</information>
</member>
</members>

我正在使用 simplexml & xpath 像这样:-
    $XML_load =  simplexml_load_file('members.xml');
foreach ($XML_load->members->xpath('//member') as $member)
{
$member_name = $member->name;
}

我遇到的问题是我不知道如何根据元素从元素中获取变量。所以我需要能够根据 .

谁能帮我这个?任何建议将不胜感激。

我希望我已经很好地解释了这个问题并且我的术语是正确的,但如果不是,请原谅我,因为我仍然是新手。

顺便说一句,像这样使用 simplexml/xpath 是最好的方法吗?我听说 xmlDOM 更好,但我似乎找不到任何可以帮助我解决上述问题的资源。

提前致谢!

最佳答案

试试这个:

<?php
$dom = new DOMDocument();
$dom->load('yourXmlFile.xml');

/*$dom->loadXml('<members>
<member>
<name>David Smith</name>
<information>
<description>home telephone</description>
<given_information>
<details>0123465987</details>
</given_information>
</information>

<information>
<description>mobile telephone</description>
<given_information>
<details>056142856987</details>
</given_information>
</information>

<information>
<description>email address</description>
<given_information>
<details>d.smith@yahoo.com</details>
</given_information>
</information>
</member>
</members>');*/

$xpath = new DOMXPath($dom);

$members = array();
foreach ($xpath->query('//member') as $memberNode) {
$nameNode = $xpath->query('name', $memberNode);
if ($nameNode->length > 0) {
$name = $nameNode->item(0)->nodeValue;
$members[$name] = array();

foreach ($xpath->query('information', $memberNode) as $informationNode) {
$descriptionNode = $xpath->query('description', $informationNode);
$givenInformationDetailsNode = $xpath->query('given_information/details', $informationNode);

if ($descriptionNode->length > 0 && $givenInformationDetailsNode->length > 0) {
$members[$name][$descriptionNode->item(0)->nodeValue] = $givenInformationDetailsNode->item(0)->nodeValue;
}
}
}
}

var_dump($members);

关于php - Xpath 并根据祖先的元素值有条件地选择后代,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5866864/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com