Php 根据deeplink属性选择一个xml对象

Php 根据deeplink属性选择一个xml对象,php,xml,xml-parsing,simplexml,filtering,Php,Xml,Xml Parsing,Simplexml,Filtering,我正在开发一个使用xml文件在屏幕上打印的页面。现在,我只需要将具有起始url的对象打印到属性中,如下所示: <product zupid="d490dd40f6dbaf238f28b57abad92fbf"> <deepLink>http://ad.zanox.com/ppc/?28132512C86846042&amp;ULP=[[offerte-viaggi/vacanze/sconti-triton-villas-residence-hotel-

我正在开发一个使用xml文件在屏幕上打印的页面。现在,我只需要将具有起始url的对象打印到属性中,如下所示:

<product zupid="d490dd40f6dbaf238f28b57abad92fbf">
     <deepLink>http://ad.zanox.com/ppc/?28132512C86846042&amp;ULP=[[offerte-viaggi/vacanze/sconti-triton-villas-residence-hotel-calabria.html]]</deepLink>
</product>

http://ad.zanox.com/ppc/?28132512C86846042&ULP=[[offerte viaggi/vacanze/sconti triton villas residence hotel calabria.html]]
现在我正在解析所有这些,因为我使用了以下函数:

for ($i=$offset; $i<$limit+$offset; $i++) { 
     $article=$xml->product[$i];
     $link = $article->deepLink;

     echo "<a target='_blank' href='$link'>Go to link</a>";
}
for($i=$offset;$iproduct[$i];
$link=$article->deepLink;
回声“;
}

如何仅选择具有该部分属性/url的对象?

SimpleXMLElement::xpath()方法允许您使用xpath表达式获取元素数组:

$documentElement = simplexml_load_string($xml);

$offset = 1;
$count = 2;

$expression = '//product
  [starts-with(deepLink, "http://ad.zanox.com/")]
  [position() >= '.$offset.' and position() < '.($offset + $count).']
';

foreach ($documentElement->xpath($expression) as $product) {
  var_dump((string)$product->deepLink);
}
$documentElement=simplexml\u load\u字符串($xml);
$offset=1;
$count=2;
$expression='//产品
[以(deepLink)开头,”http://ad.zanox.com/")]
[position()>='.$offset.'和position()<'.($offset+$count)。']
';
foreach($documentElement->xpath($expression)作为$product){
变量转储((字符串)$product->deepLink);
}
演示:

关于表达式:

选择模具文档中的所有
产品
元素

//产品

…如果作为文本的deepLink元素以给定字符串开头

//产品
[以(deepLink)开头,”http://ad.zanox.com/”)

使用最小值和最大值限制找到的节点列表

//产品
[以(deepLink)开头,”http://ad.zanox.com/")]
[position()>=1和position()<3
]`


提示:Xpath中的位置以1开头,而不是以0开头。

谢谢您的帮助。我的问题是只使用这段url->但在更改示例后它就不起作用了。为什么?另一个问题是如何加载外部xml文件而不是在同一文件中编写的xml?如果我使用此->$documentElement=new simplexmlement('testing.xml');不加载任何内容。为什么?请在backticks中设置url示例,否则将对其进行格式化。对于使用SimpleXML从文件加载xml,可以使用。请小心在url中转义。它在xml/HTML中是
&;
,但在Xpath中只是
&
(解析器解码实体)。