php获取xml的根节点,PHP-获取XML节点的价值

我有一个像这样的XML文件:

2012-07-04T13:54:51.873Z

Success

779

E779_CORE_BUNDLED_14986049_R1

US

0

1

2009-07-09T10:48:17.000Z

Canada

2

1

2009-07-09T10:48:17.000Z

我试图找到一种方法来获取SiteID节点等于任何值的SiteID节点的值.

我尝试使用XPath和DomDocument函数,但是没有任何运气.一些混乱的代码如下:

$xml_file ='SiteDetails.xml';

$xmlDoc = new DomDocument();

$xmlDoc->load($xml_file);

$xpath = new DOMXpath($xmlDoc);

$xpath->registerNamespace('ebay', 'urn:ebay:apis:eBLBaseComponents');

//$siteIDList = $xpath->query("/ebay:GeteBayDetailsResponse/ebay:SiteDetails[ebay:Site='UK']/ebay:SiteID");

//$siteIDList = $xpath->query("/GeteBayDetailsResponse/SiteDetails[Site=\"UK\"]/SiteID");

//$siteIDList = $xpath->query("//*[namespace-uri()='urn:ebay:apis:eBLBaseComponents' and name()='Site' and text()='$site']/following-sibling::*[namespace-uri()='urn:ebay:apis:eBLBaseComponents' and name()='SiteID']/text()");

//var_dump($siteIDList);

//echo $siteIDList->item(0)->nodeValue;

/*$SiteDetails = $xmlDoc->getElementsByTagName('SiteDetails');

$count = 0;

foreach($SiteDetails as $details){

// print_r($details);

echo $details->nodeValue;

if ($details->nodeValue == $site){

echo 'YEAH';

echo $details->SiteID;

}

$count ++;

}*/

//$siteID = $siteIDNode->item(8)->nodeValue;

//var_dump($siteIDNode);

}

有人可以帮忙吗?从上面可以看出,我很困惑…

解决方法:

通常的想法是,您遍历每个SiteDetails节点,并根据所需的值检查Site节点的值.

假设$xml包含您的xml作为SimpleXML实例

$site = 'Canada';

$siteId = null;

foreach($xml->SiteDetails as $sd) {

if(((string)$sd->Site) === $site) {

$siteId = (int)$sd->SiteID;

//break;

}

}

var_dump($siteId); //int(2)

使用xpath()的解决方案

这是使用xpath()的解决方案

$xml->registerXPathNamespace('ebay','urn:ebay:apis:eBLBaseComponents');

$site = 'Canada';

$siteId = $xml->xpath('ebay:SiteDetails/ebay:Site[text()="'.$site.'"]/../ebay:SiteID');

echo (string)$siteId[0]; //2

说明:

>首先,通过使用xpath的text()函数返回元素的值,找到带有子节点Site的SiteDetails节点,其子节点Site的值为“ Canada”(或$site中的任何其他值).

>然后,使用.. xpath选择器转到相应的父SiteDetails.

>最后,我们从所需的SiteDetails元素中提取SiteID的值.

祝你好运=)

标签:xpath,domdocument,xml,php

来源: https://codeday.me/bug/20191201/2078320.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值