2012-05-23 95 views
1

尽我所能,我似乎无法抓住嵌套的apcm:Property元素中的“Id”属性的值,其中“Name”属性等于“sequenceNumber”,在线12.正如你所看到的那样,感兴趣的元素被埋在其他具有相同名称和名称空间的元素之中。与名称空间和PHP相同的嵌套XML元素

使用PHP,我有困难的时间包装我的头如何获取该Id值。

<?xml version="1.0" encoding="utf-8" ?> 
<feed xmlns="http://www.w3.org/2005/Atom" xmlns:apcm="http://ap.org/schemas/03/2005/apcm" xmlns:apnm="http://ap.org/schemas/03/2005/apnm" xmlns:georss="http://www.georss.org/georss"> 
    <id>urn:publicid:ap.org:30085</id> 
<title type="xhtml"> 
    <apxh:div xmlns:apxh="http://www.w3.org/1999/xhtml"> 
     <apxh:span>AP New York State News - No Weather</apxh:span> 
    </apxh:div> 
</title> 
<apcm:Property Name="FeedProperties"> 
    <apcm:Property Name="Entitlement" Id="urn:publicid:ap.org:product:30085" Value="AP New York State News - No Weather" /> 
    <apcm:Property Name="FeedSequencing"> 
      <apcm:Property Name="sequenceNumber" Id="169310964" /> 
      <apcm:Property Name="minDateTime" Value="2012-05-22T18:04:18.913Z" /> 
    </apcm:Property> 
</apcm:Property> 
<updated>2012-05-22T18:04:18.913Z</updated> 
<author> 
    <name>The Associated Press</name> 
    <uri>http://www.ap.org</uri> 
</author> 
<rights>Copyright 2012 The Associated Press. All rights reserved. This material may not be published, broadcast, rewritten or redistributed.</rights> 
<link rel="self" href="http://syndication.ap.org/AP.Distro.Feed/GetFeed.aspx?idList=30085&amp;idListType=products&amp;maxItems=20" /> 
<entry> 
... 
</entry> 
</feed> 

回答

0

你需要注册的命名空间,并使用[]谓词,以确定你是哪个属性元素感兴趣。如果你不使用双斜线,也就是说,如果你开始从该查找这是最安全的文档元素。

<?php 

$xml = <<<EOD 
... 
EOD; 

$sxe = new SimpleXMLElement($xml); 

$sxe->registerXPathNamespace('apcm', 'http://ap.org/schemas/03/2005/apcm'); 
$sxe->registerXPathNamespace('atom', 'http://www.w3.org/2005/Atom'); 

$result = $sxe->xpath('/atom:feed/acpm:Property[@Name=\'FeedProperties\']/acpm:Property[@Name=\'FeedSequencing\']/acpm:Property[@Name=\'sequenceNumber\']/@Id'); 

foreach ($result as $sequenceNumber) { 
    echo $sequenceNumber . "\n"; 
} 

?> 

注意,可能有理论上是多个兄弟特性元素用相同的@Name等等此XPath可以产生多个节点(@Id值)。

相关问题