Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP xpath问题->;第(0)项->;节点值_Php_Xml_Xpath_Xmlnode - Fatal编程技术网

PHP xpath问题->;第(0)项->;节点值

PHP xpath问题->;第(0)项->;节点值,php,xml,xpath,xmlnode,Php,Xml,Xpath,Xmlnode,基于以下XML,我想检索特定节点(ID)的产品名称和图像 如果我执行$info->item(0)->nodeValue,我会将这两个信息收集在一起,而不是单独收集: Name of product A Product image name A 但是我想根据客户ID获取->产品->节点价值和图像->节点价值。 我该怎么做?例如,执行$info->item(0)->product->nodeValue不起作用 ->item(0)->nodeValue提供该特定项中的所有内容(在本例中为0)结果返回

基于以下XML,我想检索特定节点(ID)的产品名称和图像

如果我执行$info->item(0)->nodeValue,我会将这两个信息收集在一起,而不是单独收集:

Name of product A
Product image name A
但是我想根据客户ID获取->产品->节点价值和图像->节点价值。 我该怎么做?例如,执行$info->item(0)->product->nodeValue不起作用


->item(0)->nodeValue提供该特定项中的所有内容(在本例中为0)

结果返回单个节点(客户端)。该节点的nodevalue是它下面的所有文本

尝试:
“//客户端[@id='A']/*[name()='product'或name()='image']”将返回两个节点。如果要按位置使用它们,请记住检查名称。

使用XPath获取节点。XPath位置路径的结果是节点列表。->项(0)返回此列表中的第一个节点。这是
client
元素节点

调用domeElement:$nodeValue始终将所有子代文本节点作为字符串返回。在本例中,文本节点位于
产品
图像
元素节点内

如果希望单独获取这些值,您将有权获取子节点

$dom = new DOMDocument();
$dom->loadXML($xml);
$xpath = new DOMXpath($dom);

foreach ($xpath->evaluate('//client[@id="A"]/*[self::product or self::image]') as $child) {
    echo $child->localName, ': ', $child->nodeValue, "\n";
}
输出:

product: Name of product A
image: Product image name A
$dom = new DOMDocument();
$dom->loadXML($xml);
$xpath = new DOMXpath($dom);

foreach ($xpath->evaluate('//client[@id="A"]/*[self::product or self::image]') as $child) {
    echo $child->localName, ': ', $child->nodeValue, "\n";
}
product: Name of product A
image: Product image name A