2012-05-23 5 views
1

Попытайтесь, как я могу, я не могу захватить значение атрибута «Id» в вложенном элементе apcm: Property, где атрибут «Name» равен «sequenceNumber», в строке 12. Как вы можете видеть, элемент интереса похоронен в гнезде других элементов с одинаковым именем и пространством имен.Идентичные вложенные элементы XML с пространствами имен и PHP

Использование PHP, мне сложно провести время вокруг, как захватить это значение идентификатора.

<?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 значения).

Смежные вопросы